Skipを動かしてみた! 〜JRuby編〜
JRubyでSKIPを動かしてみて(developmentモードで)、
動作確認ができましたので、その手順をまとめておきます。
今回の検証環境は以下の通り。
- Java 1.5.0_13
- JRuby 1.1.3 (/usr/local/jruby-1.1.3 にインストール)
JRubyが正常に動作していることを確認するために、以下のコマンドを入力し、
バージョン情報が出力されることを確認してください。
$ /usr/local/jruby-1.1.3/bin/jruby -v
jruby 1.1.3 (ruby 1.8.6 patchlevel 114) (2008-07-20 rev 7243) [i386-java]
正常に動作していることが確認できたら、事前準備として以下のgemパッケージをインストールしておきます。
- actionmailer (2.0.2)
- actionpack (2.0.2)
- activerecord (2.0.2)
- activerecord-jdbc-adapter (0.8.2)
- activerecord-jdbcmysql-adapter (0.8.2)
- activeresource (2.0.2)
- activesupport (2.0.2)
- jdbc-mysql (5.0.4)
- rails (2.0.2)
- rake (0.8.1)
- rspec (1.1.4)
- sources (0.0.1)
- uuidtools (1.0.3)
インストールの方法は以下の通りです。
$ /usr/local/jruby-1.1.3/bin/gem install [gemパッケージ名]
では早速、SKIPをダウンロードします。
$ wget http://www.openskip.org/download/release/skip-0.9.1.tar.gz
続いてホームディレクトリに展開します。#必要に応じて展開先は変更してください。
$ tar xvzf skip-0.9.1.tar.gz -c ~/
$ cd skip
DBへの接続先情報を変更します。サンプルをコピーしてから、adapter部分を修正します。
adapter: mysql を adapter: jdbcmysql に変更するだけです。
$ cp config/database.yml.sample config/database.yml
$ vi config/database.ymldevelopment:
adapter: jdbcmysql
database: skip_development
username: root
password:
encoding: UTF8test:
adapter: jdbcmysql
database: skip_test
username: root
password:
encoding: UTF8
production:
adapter: mysql
database: skip_production
username: root
password:
encoding: UTF8
マイグレートし、テーブルを作成します。
$ /usr/local/jruby-1.1.3/bin/rake db:migrate
利用可能ユーザを追加します。
$ cd lib
$ /usr/local/jruby-1.1.3/bin/jruby batch_import_accounts.rb
JRuby limited openssl loaded. gem install jruby-openssl for full support.
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
/usr/local/jruby-1.1.3/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:263:in `load_missing_constant': uninitialized constant Digest::SHA1 (NameError)
from /usr/local/jruby-1.1.3/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in `const_missing'
from /home/interu/skip/app/models/account.rb:55:in `encrypt'
from /home/interu/skip/app/models/account.rb:47:in `before_save'
パスワードを暗号化する箇所でロードエラーが発生しているので明示的に Digest::SHA1 をロードするようにします。
$ vi app/models/account.rb
・・・(略)
require 'digest/sha1' # ここを追記します
class Account < ActiveRecord::Base
・・・(略)
再チャレンジするとうまく利用可能ユーザの登録ができるはずです。
続いて今回は、SKIPを稼動させるサーバとアクセスするクライアントが異なるため、
SKIP_URLを稼動サーバのIPとポート番号に指定し直します。
$ export SKIP_URL=http://[稼動サーバIP]:3000
今回はプロキシサーバを通して外部に出て行くような環境であるため、プロキシの設定を追加しておきます。
$ vi config/environments/development.rb
・・・(略)
ENV['PROXY_URL'] ||= 'http://[アカウント]:[パスワード]@[プロキシサーバIP]:[ポート番号]'
・・・(略)
次はソースコードの改修。
ユーザ登録をする際に、以下のような正規表現のエラーが出力されることがあります。
RegexpError in MypageController#update_profile
too short multibyte code string:
これはJRubyでマルチバイトコード(全角英数字や日本語など)を扱うことができないためです。
試しにJRuby版のirbであるjirbで日本語等が扱えるかを試してみましたが、文字化けすることを確認しています。
なので、以下のファイルの一部分を書き換えます。#200行目あたりです。
$ vi app/controllers/mypage_controller.rb
・・・(略)
def update_profile
params[:user][:section] = params[:new_section] unless params[:new_section].empty? #下部分のコードの置換部分を取り除く
#params[:user][:section] = params[:user][:section].tr('a-zA-Z1-9','a-zA-Z1-9').upcase #コメントアウト
params[:user][:section] = params[:user][:section].upcase
・・・(略)
あとはWEBrickを起動させて、ブラウザでアクセスしてみましょー!
簡単に動作確認してみましたが、これでOKっぽいです。
こんな簡単に動作するとは、JRubyも随分と進化していますね!
また、SKIPのコードも素晴らしいということではないでしょうか。
開発者の皆さん、すごいっすよ!
JRubyで動作させてみて、他に何か問題があるようでしたら、気軽にコメントください。すぐに調査しますんで。