jettyでJRuby On Railsを動かすメモ その2
jettyでJRuby On Railsを動かすメモでJRuby On Railsが動くようになったので次はJDBC接続でscaffoldを動かしてみる。データベースはapache derbyを組み込みモードで使うことにしてみる。
derbyのインストール
- ここからdb-derby-10.2.2.0-bin.zipをダウンロードして、C:\derbyに解凍
テスト用データベースの作成
モデルの作成
migrationファイルを作成するために以下を実行 C:\Docs\Eclipse\Workspaces\demos\simple\src\main\webapp>jruby script/generate model Programmer exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/programmer.rb create test/unit/programmer_test.rb create test/fixtures/programmers.yml exists db/migrate create db/migrate/001_create_programmers.rb
生成されたdb/migrate/001_create_programmers.rbを以下のように修正してカラムを追加
class CreateProgrammers < ActiveRecord::Migration def self.up create_table :programmers do |t| t.column "name", :string, :limit => 255, :null => false end end def self.down drop_table :programmers end end
web.xml及びconfig\database.ymlを修正
web.xmlで以下のようになっており、デフォルト動作モードはproductionなので以下のように修正
<context-param> <param-name>rails.env</param-name> <param-value>development</param-value> </context-param>
そしてdatabase.ymlを以下のように修正
development: adapter: jdbc driver: org.apache.derby.jdbc.EmbeddedDriver url: jdbc:derby:/derby/databases/dev;create=true
config/environment.rbを修正
require File.join(File.dirname(__FILE__), 'boot') の下に以下を追加(jdbc用設定らしい)
require 'rubygems' gem 'ActiveRecord-JDBC' require 'jdbc_adapter'
migrateの実行
C:\Docs\Eclipse\Workspaces\demos\simple\src\main\webapp>jruby -S rake db:migrate (in C:/Docs/Eclipse/Workspaces/demos/simple/src/main/webapp) rake aborted! The driver encountered an error: cannot load Java class org.apache.derby.jdbc.EmbeddedDriver (See full trace by running task with --trace)
む…エラーが…ってJDBCドライバにクラスパス通ってないからか。というわけで以下を実行
C:\Docs\Eclipse\Workspaces\demos\simple\src\main\webapp>set CLASSPATH=%CLASSPATH%;C:\derby\db-derby-10.2.2.0-bin\lib\derby.jar
以下でクラスパスが通ったことを確認
C:\Docs\Eclipse\Workspaces\demos\simple\src\main\webapp>echo %CLASSPATH% C:\Program Files\Java\jre1.5.0_05\lib\ext\QTJava.zip;;C:\derby\db-derby-10.2.2.0-bin\lib\derby.jar
再度実行
C:\Docs\Eclipse\Workspaces\demos\simple\src\main\webapp>jruby -S rake db:migrate (in C:/Docs/Eclipse/Workspaces/demos/simple/src/main/webapp) == CreateProgrammers: migrating =============================================== -- create_table(:programmers) -> 0.3280s == CreateProgrammers: migrated (0.3280s) ======================================
で成功した。
scaffold実行
C:\Docs\Eclipse\Workspaces\demos\simple\src\main\webapp>jruby script/generate scaffold Programmer
で特に問題なく成功
pomにjruby on railsに必須のjar及びderbyのjdbcドライバのためのjar設定を追加
warを作成した時にWEB/lib以下に含まれていた以下のjar
activation-1.1.jar bcprov-jdk14-124.jar commons-pool-1.3.jar jruby-complete-0.9.9.jar rails-integration-1.1.1.jar
及びderbyのjarの設定をjettyでJRuby On Railsを動かすメモで作成したpomに追記
<!-- for jruby on rails start--> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>bouncycastle</groupId> <artifactId>bcprov-jdk14</artifactId> <version>124</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>org.jruby</groupId> <artifactId>jruby-complete</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.jruby.extras</groupId> <artifactId>rails-integration</artifactId> <version>1.1.1</version> </dependency> <!-- for jruby on rails end--> <!-- for apache derby start--> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.2.2.0</version> </dependency> <!-- for apache derby end -->
動かしてみる
C:\Docs\Eclipse\Workspaces\demos\simple>mvn jetty:run
で起動したら、
http://localhost:8080/simple/programmers/list
にアクセスして無事動作した。日本語も問題ない模様。
ただ、OutOfMemoryErrorが発生してる…んーなぜだろう…とりあえず今日はここまで。