「JRuby On Rails」の編集履歴(バックアップ)一覧に戻る

JRuby On Rails - (2008/10/21 (火) 23:33:43) のソース

<p>JRubyとは</p>
<p>JRuby の環境構築</p>
<p>JRuby On Railsの環境構築</p>
<p>JRoRアプリの作成</p>
<p>コアライブラリの利用</p>
<p>Javaライブラリの利用</p>
<p>JRoRアプリのTomcatへのデプロイ</p>
<hr /><h2><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title01" name="title01">JRubyとは</a></h2>
<p align="left">Javaで書かれたRubyの実行環境です。</p>
<p align="left">
JVM上で動くRubyのため両言語間のシームレスな連携を実現している点が特徴である。具体的にはRubyからJavaのオブジェクトにアクセスが可能となります。</p>
<p align="left">
逆にJavaからRubyにアクセスするためのAPIには、「<strong>JSR223</strong>」「<strong>BSF</strong>」などがあります。</p>
<p align="left">
母体となる言語は「Ruby」であり、まつもとゆきひろ氏により、1993/2/24に誕生しました。「気軽に使えて、柔軟に書ける、オブジェクト指向言語」です。</p>
<p align="left">現在の最新ヴァージョンは、1.1.4 であり、Ruby 1.8.6に完全互換しています。</p>
<p align="left">◆Jruby公式サイト:<a href="http://jruby.codehaus.org/">http://jruby.codehaus.org/</a></p>
<p align="left">【参考文献】:『JRuby 徹底入門』</p>
<p align="left">◆サポートサイト:<a href="http:///www.sotechsha.co.jp/sp/645/">http:///www.sotechsha.co.jp/sp/645/</a></p>
<p> </p>
<hr /><h2><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title02" name="title02">JRuby の環境構築</a></h2>
<p align="left">◆JRubyに必要な環境</p>
<p align="left">JDKのインストール</p>
<p align="left">インストールされていない方は、<a href="http://java.sun.com/javase/ja/6/download.html">こちら</a>よりJDKをダウンロードしインストーラに従いインストールしてください。ここではjdk1.6.0_06を使うものとして話を進めます。</p>
<p align="left">ちなみに環境変数は、</p>
<p align="left">JAVA_HOME=C:\Program Files\Java\jdk1.6.0_06</p>
<p align="left">とします。</p>
<p align="left">Path=%JAVA_HOME%\bin;%Path%;</p>
<p align="left">
(※もしOracleなどをインストールする場合は、Oracleのパスよりも前に%JAVA_HOME%\bin;を通してください。)</p>
<p align="left">◆JRubyのインストール</p>
<p align="left">・Windowsの場合は、zipを選択</p>
<p align="left"><a href="http://jruby.codehaus.org/">ここから</a>最新(<a href="http://dist.codehaus.org/jruby/jruby-bin-1.1.4.zip">jruby-bin-1.1.4.zip</a>)をダウンロードし、zip解凍して環境変数を設定します。</p>
<p align="left">ここでは例として以下の環境に展開しました。</p>
<p align="left">C:\jruby\jruby-1.1.4</p>
<p align="left">環境変数の設定</p>
<p align="left">
JRubyは実は後述するRadRailsによる開発の場合、プラグインについてきます。なのでRadRailsで開発する場合には必ずしも必要がないでしょう。その場合は、実際の開発環境に合わせて設定してください。このモジュールを使うとした場合は以下のようにするといいでしょう。</p>
<p align="left">JRUBY_HOME=C:\jruby\jruby-1.1.4</p>
<p align="left">Path=%Path%;%JRUBY_HOME%\bin;</p>
<p> </p>
<hr /><h2><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title03" name="title03">JRuby On Railsの環境構築</a></h2>
<p align="left">◆あると便利なIDE環境</p>
<p align="left">EclipseのRadRails</p>
<p align="left"><font size="2">全部そろった「<strong>pleiades-all-in-one-ultimate_20081006.zip</strong>」がお勧めです。(=>ダウンロードは</font><a href="http://mergedoc.sourceforge.jp/"><font color="#FF00FF" size="2"><strong>こちら</strong></font></a><font size="2">から。Eclipse 3.4.1
Ganymedeのultimateがお勧めです。ちなみに3.3.1のほうにはultimateでも今回使いたいRadRailsのプラグインが入ってませんでした。。。)</font></p>
<p align="left">これを仕込めば自動的にJRubyのVMがプラグインとして付随してきます。</p>
<p align="left">ここでは、eclipseの環境を以下とし、</p>
<p align="left">C:\eclipse\341</p>
<p align="left">eclipseでのワークスペースを以下とします。</p>
<p align="left">C:\workspace\341</p>
<p align="left">
ここでRadRailsのプラグインが使用するRubyを選択できますが、付属のJRubyを使う場合、それは以下にあります。</p>
<p align="left">
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2</p>
<p align="left">これを使用する場合、環境変数の設定は以下のようになるはずです。</p>
<p align="left">
JRUBY_HOME=C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2</p>
<p align="left"> </p>
<p align="left">◆Webサーバ</p>
<p align="left">
開発工期においてはスタンドアロンで開発機にあればいいだろう、リリースを踏まえた場合、他機に構築して使えるようにしておきたい。</p>
<p align="left">
開発時点では、自機にApacheかMongrelサーバをたてて使用する。後ほどRailsアプリをTomcatに配置して動かしてみようと思う。スタンドアロンでの動作確認が済み次第、リリースマシンを準備する。リリース時期にはWebサーバ+アプリサーバ機としてCentOSを用意する。</p>
<p align="left">開発時期:開発機(192.168.1.52):Apache1.3,Tomcat5.5,Mongrel</p>
<p align="left">リリース時期:リリース機(192.168.1.40):Apache2.2.4,Tomcat5.5,Mongrel</p>
<p align="left">
開発機の準備には、個別にサーバを導入してもいいですが、そもそもRailsをやるかたは、InstantRailsがインストールされているのではないでしょうか。その場合は、Apacheなど特にヴァージョンにこだわりがなければそれを間借りしましょう。Mongrelの場合はちゃんと使用するRubyの環境に合わせてgem
でインストールする必要があります。</p>
<p align="left">C:\jruby\jruby-1.1.4\lib\ruby\gems\1.8\gems</p>
<p align="left">もしくは、</p>
<p align="left">
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2\lib\ruby\gems\1.8\gems</p>
<p align="left">の内部を調べ、mongrelが入っていることを念のため確認しておきましょう。</p>
<p align="left">Tomcatを準備していない方は、<a href="http://tomcat.apache.org/index.html">こちら</a>よりダウンロードしてインストールしてください。</p>
<p align="left">
上記で紹介したeclipseにはTomcatのプラグインが入っているのでプロパティの設定でパスを合わせてください。もし後述のOracleXEをインストールする場合は、<strong>8080ポートを奪われないように</strong>、ここで立ち上げておいてください。</p>
<p align="left">◆DBサーバ</p>
<p align="left">対応しているRDBMSは多い。ここでは Oracleを使ってみようと思う。デフォルトとはRails
1.2.3ではMySQLであり、Rails 2.0.2
ではSQLite3である。Oracleでの導入例の情報は少ないが、できるだけこの環境で構築してみたいと思う。またあわせて、MySQLの環境も構築できることを確認しておきたい。RailsはマルチDBの構築を目指しているが、それが実際のところ可能なのかをここで調査していきたい。</p>
<p align="left">開発時期:開発機(192.168.1.52):Orcale10g XE</p>
<p align="left">リリース時期:リリース機(192.168.1.36):Orcale10g R02</p>
<p align="left">まだDBを準備していない方は、開発機に使用する予定のOracleXEは<a href="http://www.oracle.com/technology/software/products/database/xe/index.html">こちら</a>よりダウンロードしてインストールしてください。この時注意すべきは、後ほど使用する予定のTomcatとのポートのぶつかりあいです。これを避ける手軽な方法は、Tomcat5.5のほうを先にインストールしておき、起動して8080ポートをリスニング状態にしたうえで、OracleXEのインストーラを実行すれば、デフォルトは8081が指定されるでよう。</p>
<p align="left">環境変数は</p>
<p align="left">ORACLE_SID=XE</p>
<p align="left">
ユーザは開発用とテスト用と、あと念のためリリース用のスキーマを準備しましょう。Railsの場合DB作成までやってくれるToolがついていますが、Oracleの場合は3つのDBを作るよりも、3つのスキーマを作成するほうが現実的だと判断します。</p>
<p align="left">dev01/oracle</p>
<p align="left">tes01/oracle</p>
<p align="left">pro01/oracle</p>
<p align="left">を作成します。</p>
<p align="left">作業はインストールに成功していれば以下のURLでWebからできるでしょう。</p>
<p align="left"><a href="http://127.0.0.1:8081/apex/">http://127.0.0.1:8081/apex/</a></p>
<p align="left">また、リリース機へのOracleの用意は別途行ってください。</p>
<p align="left">
リナックス機へのOracle製品のインストールはそれなりに複雑ですので、手順を踏まえないと失敗します。ここではインストールの詳細は触れませんが、後ほど『CentOS5へのOracle10gのインストールマニュアル』の記事を書く予定でいます。</p>
<p align="left"> DBサーバリリース機の情報</p>
<p align="left">IPアドレス(例):192.168.1.36</p>
<p align="left">ORACLE_SID=orcl</p>
<p align="left">dev01/oracle</p>
<p align="left">tes01/oracle</p>
<p align="left">pro01/oracle</p>
<p align="left">操作は以下のWebToolが便利です。</p>
<p align="left"><a href="http://192.168.1.36:5560/isqlplus/">http://192.168.1.36:5560/isqlplus/</a></p>
<p align="left">ユーザ作成などの管理Toolは以下から作業するのがいいでしょう。</p>
<p align="left"><a href="http://192.168.1.36:1158/em/">http://192.168.1.36:1158/em/</a></p>
<p align="left"> ユーザの作成</p>
<p align="left">sys/xxxxx SYSDBA<br />
管理=>ユーザの作成=>作成</p>
<p align="left"><img alt="" src="http://www19.atwiki.jp/hide1227/?cmd=upload&amp;act=open&amp;page=JRuby%20On%20Rails&amp;file=dev01.jpg" /></p>
<p align="left">スタンドアロンにしてもそうでないにしても、DBサーバを準備したら、次に OracleのClientを準備します。</p>
<p align="left">ダウンロードはこちらから <a href="http://www.oracle.com/technology/tech/oci/instantclient/">Instant Client</a></p>
<p align="left">アカウントの登録をすればダウンロード可能になる。<br />
登録後、サイト登録を行い、ダウンロードページにてサインイン。<br /><br />
BASICとSDKだけでもいいらしいが、念のため全部ダウンロードする。</p>
<p align="left">instantclient-basic-win32-10.2.0.3-20061115.zip<br />
instantclient-jdbc-win32-10.2.0.3-20061115.zip<br />
instantclient-odbc-win32-10.2.0.3-20061115.zip<br />
instantclient-sdk-win32-10.2.0.3-20061115.zip<br />
instantclient-sqlplus-win32-10.2.0.3-20061115.zip</p>
<p align="left">これを以下に解凍する。</p>
<p align="left">C:\MY\TOOL\EXT\instantclient_10_2</p>
<p align="left">中にあるDDLファイル一覧</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left">heteroxa10.dll<br />
oci.dll<br />
ocijdbc10.dll<br />
ociw32.dll<br />
orannzsbb10.dll<br />
oraocci10.dll<br />
oraociei10.dll<br />
Orasqlplusic10.dll<br />
sqora32.dll<br />
sqoras32.dll<br />
sqresja.dll<br />
sqresus.dll</p>
</blockquote>
<p align="left"> </p>
<p align="left">次にRubyのバインディングのためのOracleのOCIドライバを準備します。</p>
<p align="left">ダウンロードはRubyForgeから <a href="http://rubyforge.org/frs/?group_id=256&amp;release_id=9129">ruby-oci8-1.0.3-mswin32.rb</a></p>
<p align="left">
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p2\bin</p>
<p align="left">に配置します。</p>
<p align="left">ダウンロードしたrbファイルを指定して任意のディレクトリでrubyコマンドの実行します。</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left">
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p<br />
2\bin&gt;jruby ruby-oci8-1.0.3-mswin32.rb<br />
This package is for i386-mswin32<br />
install anyway?<br />
Enter Yes/No: yes<br />
Copy OCI8.rb to
C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jruby<br />
_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/DBD/OCI8<br />
Copy oci8.rb to
C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jruby<br />
_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8<br />
Copy oci8lib.so to
C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jr<br />
uby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/java<br />
OK?<br />
Enter Yes/No: y<br />
Copying OCI8.rb to
C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jr<br />
uby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/DBD/OCI8 ... done<br />
Copying oci8.rb to
C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org.jr<br />
uby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8 ... done<br />
Copying oci8lib.so to
C:/eclipse/341/dropins/Aptana_RadRails/eclipse/plugins/org<br />
.jruby_1.1.0.5965_RC2p2/lib/ruby/site_ruby/1.8/java ... done<br />
OK</p>
<p align="left">
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p<br />
2\bin&gt;</p>
</blockquote>
<p align="left"> </p>
<p align="left">◆超お手軽一括インストーラ</p>
<p align="left"><a href="http://bitnami.org/">BitNami</a>JRubyStack :<a href="http://bitnami.org/stack/jrubystack">ダウンロード</a></p>
<hr /><h2><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title04" name="title04">JRoRアプリの作成</a></h2>
<p align="left">
アプリの作成はeclipse上のRadRailsで行おうと思う。今回はRubyではなくJRubyを使う点と、あらかじめ他のInstantRailsとかの開発環境が混じっているとgemなどで問題を生じるので、環境変数Pathを確認する。ここは念には念を。再確認します。</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left">
C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.0.5965_RC2p<br />
2\bin&gt;echo %Path%<br />
Path:=C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\InstantRails20\mysql\b<br />
in;C:\Program
Files\Java\jdk1.6.0_06\bin;C:\WINNT\system32;C:\WINNT;C:\WINNT\Sys<br />
tem32\Wbem;C:\eclipse\341\dropins\Aptana_RadRails\eclipse\plugins\org.jruby_1.1.<br />
0.5965_RC2p2\bin;</p>
</blockquote>
<p align="left">
プラグインのほうのJRubyが優先されていることを確認。(コンソールで作業するケースが出てきた場合にここが重要になる。)</p>
<p align="left">eclipseの設定の確認</p>
<p align="left"> <img alt="" src="http://www19.atwiki.jp/hide1227/?cmd=upload&amp;act=open&amp;page=JRuby%20On%20Rails&amp;file=jruby_path.jpg" /></p>
<p align="left">プロジェクトの作成</p>
<p align="left">プロジェクト名:JRoROra01</p>
<p align="left"><img alt="" src="http://www19.atwiki.jp/hide1227/?cmd=upload&amp;act=open&amp;page=JRuby%20On%20Rails&amp;file=JRoROra01.jpg" /></p>
<p align="left"> プロジェクトのソースの雛形を一括作成後、自動的にサーバが立ち上がっています。</p>
<p align="left"><a href="http://127.0.0.1:3006/">http://127.0.0.1:3006/</a></p>
<p align="left">まだ対応する画面もテーブルも作成していないので、Topページのみの動作確認です。</p>
<p align="left"><img alt="" src="http://www19.atwiki.jp/hide1227/?cmd=upload&amp;act=open&amp;page=JRuby%20On%20Rails&amp;file=JRoROra01_server.jpg" /></p>
<p align="left">次に通常はDBを作成します。</p>
<p align="left">たいていの場合は、「rake
db:create」にてDB自体を生成しますが、今回のOracleの場合は、この手順は割愛し、既存のインストール時のDBを使用することにします。</p>
<p align="left">scaffoldします。</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left">scaffold<br />
todo limit:timestamp title:string detail:text</p>
</blockquote>
<p align="left"> <img alt="" src="http://www19.atwiki.jp/hide1227/?cmd=upload&amp;act=open&amp;page=JRuby%20On%20Rails&amp;file=JRoROra01_scaffold.jpg" /></p>
<p align="left">MVCアーキテクチャの対応ソースが一気にでき、更にマイグレーションファイルもできあがっています。中身を確認します。</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left"> class CreateTodos &lt; ActiveRecord::Migration<br />
  def self.up<br />
    create_table :todos do |t|<br />
      t.timestamp :limit<br />
      t.string :title<br />
      t.text :detail</p>
<p align="left">      t.timestamps<br />
    end<br />
  end</p>
<p align="left">  def self.down<br />
    drop_table :todos<br />
  end<br />
end</p>
</blockquote>
<p align="left"> 次にいよいよ、DBにテーブルを作成しますが、その前にDBへの接続条件を確認します。</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left">development:<br />
  adapter: oracle<br />
  database: 192.168.1.36/orcl<br />
  username: dev01<br />
  password: oracle</p>
<p align="left">test:<br />
  adapter: oracle<br />
  database: 192.168.1.36/orcl<br />
  username: tes01<br />
  password: oracle</p>
<p align="left">production:<br />
  adapter: oracle<br />
  database: 192.168.1.36/orcl<br />
  username: pro01<br />
  password: oracle</p>
</blockquote>
<p align="left">
 念のためクライアントPCからDBサーバ側へSSH接続するなりして疎通確認を行います。特に1521番ポートは使用するので、ちゃんとポートがLISTENING状態であり、F/Wにおいても開放されていることを確認しておきます。</p>
<blockquote dir="ltr" style="margin-right:0px;">
<p align="left">[root@vm36 ~]# ifconfig<br />
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C8:19:70<br />
          inet addr:192.168.1.36  Bcast:192.168.1.255  Mask:255.255.255.0</p>
<p align="left">...</p>
<p align="left">[root@vm36 ~]# netstat -na | grep 1521<br />
tcp        0      0 0.0.0.0:1521                0.0.0.0:*                  
LISTEN<br />
tcp        0      0 127.0.0.1:31502             127.0.0.1:1521             
ESTABLISHED</p>
</blockquote>
<p align="left"> ここで、db:migrateを実行する。</p>
<p align="left"> <img alt="" src="http://www19.atwiki.jp/hide1227/?cmd=upload&amp;act=open&amp;page=JRuby%20On%20Rails&amp;file=JRoROra01_dbmigrate.jpg" /></p>
<p align="left"> </p>
<p align="left"> </p>
<p align="left"> </p>
<hr /><p><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title05" name="title05">コアライブラリの利用</a></p>
<p>あ</p>
<hr /><p><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title06" name="title06">Javaライブラリの利用</a></p>
<p>あ</p>
<hr /><p><a class="FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC FCK__AnchorC" id="title07" name="title07">JRoRアプリのTomcatへのデプロイ</a></p>
<p>あ</p>