読者です 読者をやめる 読者になる 読者になる

よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

Skipを動かしてみた! 〜JRuby編〜

JRuby

http://skip.s3.amazonaws.com/images/skip_banner.png
JRubyでSKIPを動かしてみて(developmentモードで)、
動作確認ができましたので、その手順をまとめておきます。

今回の検証環境は以下の通り。

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パッケージをインストールしておきます。

インストールの方法は以下の通りです。

$ /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.yml

development:
adapter: jdbcmysql
database: skip_development
username: root
password:
encoding: UTF8

test:
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を起動させて、ブラウザでアクセスしてみましょー!

$ /usr/local/jruby-1.1.3/bin/jruby script/server webrick

簡単に動作確認してみましたが、これでOKっぽいです。
こんな簡単に動作するとは、JRubyも随分と進化していますね!
また、SKIPのコードも素晴らしいということではないでしょうか。
開発者の皆さん、すごいっすよ!

JRubyで動作させてみて、他に何か問題があるようでしたら、気軽にコメントください。すぐに調査しますんで。