JRuby1.1 on Rails
JRuby1.1とGlassFishでJRuby on Railsをやってみた。
Rubyの最新版をビルド
- NetBeans 6.0(Full)をダウンロード
- Versioning -> Subversion -> Check outを選択。
- Repository URLにhttp://svn.codehaus.org/jruby/trunk/jrubyを入力する。User、Passwordは空欄でOKでチェックアウト。
- OpenProjectするか聞かれたらするほうで。
- ProjectsにJRuby trunkが追加される。
- build.xmlのjarターゲットを実行
これでビルドされる。cmdでPATHを通して
>jruby -v Ruby 1.8.5 (2008-01-03 rev 5128) [x86-jruby1.1b1]
JRuby設定
- Tools -> Optionsで設定画面を開き、Rubyタブを選択。
- Ruby Interpreterに先ほどチェックアウトしたJRubyのbin\jruby.batを指定してOKボタン
- Tools -> Ruby Gemsを選択する。
- 以下のGemを追加
- rails
- ActiveRecord-JDBC
- activerecord-jdbc-adapter
- activerecord-jdbcmysql-adapter
ActiveRecord-JDBC周りはmysqlでJDBCを使わない場合はいらないらしい。
サンプルプロジェクト作成
今回はRails2.0.2のテストとしてこれを作ってみた。
- Projectsを右クリックしてNew Project
- Ruby -> Ruby on Rails Application
- 以下を設定。
- Project Name: todo
- Database:mysql
- Access Database Using JDBC:チェックしない
- Add Rake Targets to Support App Server Deployment:チェックしない
最後のチェックを入れるとGoldSpikeというJavaとRoRを連携させるプラグインがインストールされるが、古いとエラーになるみたいなので最新版をあとでチェックアウトする。
※後述のWarを作るターゲットでprivate method `makedirs' called for File:Classというエラーがでる
Projectsでtodoプロジェクトを右クリックしてRun Rake Task→db→create→allを選択。
これでDBが作成される。rootのパスワードが設定されている場合は先に、database.ymlのコンフィグをやっておく。
- Projectsでtodoプロジェクトを右クリックしてGenerateを選択
- 以下を設定してOK
- Genereate:scaffold
- Model:Todo title:string body:text done:boolean due:datetime
- Projectsでtodoプロジェクトを右クリックしてMigrate Database→To Current Versionを選択。
- Projectsでtodoプロジェクトを右クリックしてrunを実行する。Webricでとりあえず動くかを確認する。
GlassFishへのデプロイ
いよいよWarにしてGlassFishに配置する。
まずはJavaEE-RoRの連携プラグインであるGoldSpikeをインストールする。
- コマンドプロンプトでこのプロジェクトディレクトリに移動。
jruby script\plugin install http://jruby-extras.rubyforge.org/svn/trunk/rails-integration/plugins/goldspike/
Revision 862以上ならばバグが修正されている。- 動作確認のため以下のコマンドを実行する。
jruby -S rake -T ・・・ rake war:standalone:assemble # Assemble the files for a standalone ... rake war:standalone:create # Create a self-contained Java war rake war:standalone:run # Run the webapp in Jetty
というwarを作成するTaskがあればOK
- config/war.rbというファイルが追加されているので、maven_library 'mysql', 'mysql-connector-java', '5.0.4'のコメントをはずす。
- controller/application.rbにある
protect_from_forgery #:secret => '043d72660fe6fea5e591c289d7751eae'
の#でコメントされている部分から#をはずし、'043d72660fe6fea5e591c289d7751eae'の中身を変更する。
これはRails2から導入されたCSRF対策用の設定。secretの設定値はランダム値がいいらしい。これをやっていないとNewリンクをクリックしたときにActionController::InvalidAuthenticityToken in Todos#newというエラーがでる。
- Projectsでtodoプロジェクトを右クリックしてRun rake task -> war -> standalone -> createを選択する。
- しばらくほうっておくとプロジェクトディレクトリ直下にtodo.warが生成される
- Production環境で実行されるので以下のコマンドでDBにmigrateしておく。
jruby -S rake db:migrate RAILS_ENV=production
- Servicesタブを選択する。ServersからGlassFishを右クリックしてStartをする。
- ServersからGlassFishを右クリックしてView Adminconsoleを選択する。
- AdminCosoleがブラウザで開くのでログインする。
- Deploy Web Applicationを押す。
- Locationに生成したWarを指定してOKを押す。
- http://localhost:8080/todo/todosにアクセスする。
これでアクセスできるはず。
GlassFishに載せてしまうと通常のRailsのようにはファイルが簡単に更新できなくなるので手元でWebricとかで開発して運用はGlassFishみたいな使い分けが必要だなぁ。
0 件のコメント:
コメントを投稿