1

rbenv、MRI Ruby (1.9.2-p290)、rails 3.0.9、SQLite3 を使用した Ruby/Rails 開発環境があります。JRubyに移植したいのですが、Railsアプリケーションのルートディレクトリで「rbenv local jruby-1.6.4」と「rails server」を実行するだけで使えるようにします。 JRuby で、MRI Ruby で使用するには「rbenv local 1.9.2-p290」と「rails serer」を使用します。

SQLite にアクセスするための gem が Ruby と JRuby で異なることは承知していますが、Ruby が MRI の場合は MRI 関連の gem がピックアップされ、Ruby が MRI の場合は JRuby 関連の gem がピックアップされるように、Gemfile をどのように記述すればよいでしょうか。 RubyはJRubyですか?

また、SQLite の代わりに MySQL に移植する必要があります。ここで Ruby と JRuby にはどの gem を使用する必要がありますか?

記録として、Ubuntu 11.04、Ruby 1.9.2-p290、JRuby 1.6.4、および Rails 3.0.9 または 3.0.10 を使用しています。

4

1 に答える 1

2

昨年、大規模な Rails アプリケーションを JRuby に移植しましたが、驚くほどの作業量でした。確かに、その一部は、アプリの記述がかなり悪く、多くのレガシー コードが含まれていたことに関係していましたが、それでもなお. ご参考までに: 私たちの問題のほとんどは使用した gem に起因しており、当時 JRuby で適切に動作しなかった FFI などに依存していたことがありました。少し後に行ったルビニウスへの移植は、痛みがはるかに少ないように見えましたが、MRIを続けることを支持して放棄されました.

Gemfile には、platform使用できるオプションがあります。Bundler ドキュメントの例を次に示します。

gem "weakling",   :platforms => :jruby
gem "ruby-debug", :platforms => :mri_18
gem "nokogiri",   :platforms => [:mri_18, :jruby]

ブロック形式もあります。

platforms :jruby do
  gem "foo"
end

どちらの形式でもうまく機能します。

グループに関連するすべての操作 (bundle install、Bundler.setup、Bundler.require) は、現在のプラットフォームに一致しないグループが明示的に除外された場合とまったく同じように動作します。

MySQL の gem として、適切な名前の を使用します。JRuby 用のmysqlがあるようjdbc-mysqlです。

于 2011-10-18T07:29:38.817 に答える