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,以及“rbenv local 1.9.2-p290”和“rails serer”一起使用它与 MRI Ruby。

我知道 Ruby 和 JRuby 访问 SQLite 的 gem 是不同的,但是你如何编写 Gemfile 以便在 Ruby 是 MRI 时拾取与 MRI 相关的 gem,而当Ruby 是 JRuby 吗?

我还需要将它移植到 MySQL 而不是 SQLite。对于 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,然后有时依赖于例如 FFI,当时无法与 JRuby 一起正常工作。后来我做了一个去鲁比尼乌斯的移植手术,似乎没有那么痛苦,但为了继续做核磁共振而被放弃了。

对于 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,我会使用 aptly named mysql,JRuby 似乎有一个jdbc-mysql

于 2011-10-18T07:29:38.817 回答