Hatena::Groupprogram

ひとり開発日記。 このページをアンテナに追加 RSSフィード

2012/12/10 (Mon)

JRubyでRedmineをさくらのVPSで動かす、ただそれだけのはずだったのに(仮)

| JRubyでRedmineをさくらのVPSで動かす、ただそれだけのはずだったのに(仮) - ひとり開発日記。 を含むブックマーク はてなブックマーク - JRubyでRedmineをさくらのVPSで動かす、ただそれだけのはずだったのに(仮) - ひとり開発日記。

Redmineタスク管理したことない、5人ほどのチームに、ちょっと使ってみてほしいと思ったんですよね。 で、このためにサーバ用の筺体を購入するのよりも、まず格安プランのVPSで試しに動かしてみようか、ってことになったんです。

  1. ノートPC(Windows7)で動作確認
  2. それを、さくらVPSに持って行って、動かす

上記の手順を踏もうとすると、まずWindows機でRubyを動かそうとすると大変だよな…、って思ったので、JRubyを使って、RedmineをWAR化して、Tomcatで動せば良いんじゃないかと考えたワケです。 WARならWindows機でも、さくらVPSCentOSでも動きますしね…。

…だったはずなのですが、想像以上に難儀だったので、ここにメモを残す次第です。

(続く)

JRubyでRedmineをWin7環境で動かす

| JRubyでRedmineをWin7環境で動かす - ひとり開発日記。 を含むブックマーク はてなブックマーク - JRubyでRedmineをWin7環境で動かす - ひとり開発日記。

ローカル環境は以下の通り

これを以下のブログに書かれた方法に従って、動かしてみることにします。

  1. bundlerをインストール
    • 問題無し
  2. Redmineダウンロード、展開
    • 問題無し
  3. データベース接続を設定
    • database.yml.example -> database.yml にリネームして内容修正
    • 問題無し
  4. メールサーバー接続を設定
    • configuration.yml.example -> configuration.yml にリネームするだけ
    • 問題なし
  5. Gemパッケージをインストール
    • MySQLを使うので、 > bundle install --without development test
    • 問題なし

ここまでは簡単だったんですけど、次の「Redmineの初期設定、およびデータベースのテーブルを作成」で激ハマり…。

>rake generate_secret_token
>SET RAILS_ENV=production
>rake db:migrate

とすると、しばらくマイグレーションのログが走っていたのですが、突如謎のエラーが…。

==  InsertBuiltinRoles: migrating =============================================
rake aborted!
An error has occurred, all later migrations canceled:

(C:/workspace/redmine/config/locales/ar.yml): expected ',' or ']', but got Value while parsing a flow sequence at line 18 column 21
org/jruby/ext/psych/PsychParser.java:213:in `parse'
org/jruby/RubyIO.java:1183:in `open'
org/jruby/RubyBasicObject.java:1665:in `__send__'
org/jruby/RubyKernel.java:2090:in `send'
org/jruby/RubyArray.java:1612:in `each'
org/jruby/RubyKernel.java:1174:in `catch'
org/jruby/RubyArray.java:1612:in `each'
org/jruby/RubyKernel.java:1174:in `catch'
C:/workspace/redmine/lib/redmine/i18n.rb:13:in `l'
C:/workspace/redmine/app/models/role.rb:125:in `name'
org/jruby/RubyBasicObject.java:1659:in `__send__'
org/jruby/RubyKernel.java:2086:in `send'
org/jruby/RubyBasicObject.java:1665:in `__send__'
org/jruby/RubyKernel.java:2090:in `send'
org/jruby/RubyArray.java:1612:in `each'
org/jruby/RubyBasicObject.java:1665:in `__send__'
org/jruby/RubyKernel.java:2090:in `send'
org/jruby/RubyBasicObject.java:1659:in `__send__'
org/jruby/RubyKernel.java:2086:in `send'
org/jruby/RubyBasicObject.java:1659:in `__send__'
org/jruby/RubyKernel.java:2086:in `send'
org/jruby/RubyBasicObject.java:1659:in `__send__'
org/jruby/RubyKernel.java:2086:in `send'
org/jruby/RubyBasicObject.java:1659:in `__send__'
org/jruby/RubyKernel.java:2086:in `send'
C:/workspace/redmine/db/migrate/062_insert_builtin_roles.rb:6:in `up'
org/jruby/RubyBasicObject.java:1659:in `__send__'
org/jruby/RubyKernel.java:2086:in `send'
org/jruby/RubyBasicObject.java:1665:in `__send__'
org/jruby/RubyProc.java:249:in `call'
org/jruby/RubyArray.java:1612:in `each'
org/jruby/RubyProc.java:249:in `call'
org/jruby/RubyArray.java:1612:in `each'
org/jruby/RubyArray.java:1612:in `each'
org/jruby/RubyKernel.java:1046:in `load'
C:\Program Files\Java\jruby-1.7.1\bin\rake:23:in `(root)'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

全く意味不明ですがなー…。*2

結局、以下のブログを参考に、JRubyを1.6.8に変更したら無事マイグレーション完了したという…。*3

JRubyでRedmineをWAR化する。

| JRubyでRedmineをWAR化する。 - ひとり開発日記。 を含むブックマーク はてなブックマーク - JRubyでRedmineをWAR化する。 - ひとり開発日記。

を参考に、WARを作ってみます

  1. warblerインストール
  2. warble.rbを作成、編集
  3. warbleでWARを作成
  4. redmine.warを、さくらVPSTomcat上に転送、Tomcat再起動
  5. 表示された!
  6. ユーザー作成、チケット作成をしようとしたら、例外発生!
    • な、なじぇ…。

Tomcatのログを見ても、"org.jruby.rack.RackInitializationException: wrong number of arguments (1 for 2)"ってなんぞこれ…。

結局、Stack Overflowこれを参照に、JRuby Rackのバージョンを落とすことに。

c:\workspace\redmine>jgem uninstall jruby-rack -v 1.1.12

You have requested to uninstall the gem:
        jruby-rack-1.1.12
warbler-1.3.6 depends on [jruby-rack (>= 1.0.0)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  y
Successfully uninstalled jruby-rack-1.1.12

c:\workspace\redmine>jgem install jruby-rack -v 1.0.10
Successfully installed jruby-rack-1.0.10
1 gem installed

で、次は"Encoding::CompatibilityError (incompatible character encodings: ASCII-8BIT and UTF-8)"とか言うのがわらわら出てくる…。

ちょっとググったら、これRuby 1.9とRails3の有名な不具合*4なんですね…。 JRubyじゃmysql2とか意味ないし*5、もうここはRuby 1.8に変更することに。

warble.rbを以下のように変更します。

  # Set JRuby to run in 1.9 mode.
  config.webxml.jruby.compat.version = "1.8"

JRuby-Jarsのバージョンが1.7.1だと、Tomcat上で動くJRubyのバージョンが1.7.1になるので、それを作業環境と同じ1.6.8にします。

c:\workspace\redmine>jgem uninstall jruby-jars -v 1.7.1

You have requested to uninstall the gem:
        jruby-jars-1.7.1
warbler-1.3.6 depends on [jruby-jars (>= 1.4.0)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  y
Successfully uninstalled jruby-jars-1.7.1

c:\workspace\redmine>jgem install jruby-jars -v 1.6.8
Fetching: jruby-jars-1.6.8.gem (100%)
Successfully installed jruby-jars-1.6.8
1 gem installed

これでもう一度、warbleコマンドでWARを作って、Tomcat上に転送したら、よかった、動いています。 チケット作っても例外発生しませんよ…。*6

JRubyでRedmineを動かすまとめ

| JRubyでRedmineを動かすまとめ - ひとり開発日記。 を含むブックマーク はてなブックマーク - JRubyでRedmineを動かすまとめ - ひとり開発日記。

  • Redmine 2.1.2 は JRuby1.6.8 で動かす
  • WAR化する時に、 Ruby1.8.x で動くように warble.rb を設定
  • JRuby-Rack は1.0.10
  • JRuby-Jars は1.6.8

*1:これを書いている時点での最新 http://jruby.org/download

*2Rubyについては殆ど初心者なので…

*3:まぁ、JRubyインストールって、Zipファイル解凍するだけですし、環境変数JRUBY_HOME書き換えれば、バージョン切り替えも簡単なのが、救いといえば救いなんですけど…

*4http://www.openscript.org/wiki/index.php?Rails3#s93b1f3b

*5JRubyは、JDBC経由でDBに接続する

*6:何か問題あったとき、問題がRubyなのか、Railsなのか、Redmineなのか、JRubyなのか、Javaなのか、Tomcatなのか、MySQLなのか、それを回避するには、どこをどうすればいいのか、の切り分けが非常に困難、と言うのは、マジ困り物…。

トラックバック - http://program.g.hatena.ne.jp/halflite/20121210