我使用RBENV,MRI Ruby(1.9.2-P290),Rails 3.0.9和SQLite3有一个红宝石/轨道转发环境。我想将其移植到jruby,但是这样做以至于我不必做任何其他事情,只能在Rails应用程序的根目录中运行“ RBENV local Jruby-1.6.4”和“ Rails Server”来使用它来使用它与Jruby和“ Rbenv Local 1.9.2-P290”和“ Rails Serer”一起与MRI Ruby一起使用。

我知道,对于Ruby和Jruby而言,要访问Sqlite的宝石是不同的,但是您如何编写Gemfile,以便在Ruby是MRI时拾取了与MRI相关的宝石,而当jruby相关的宝石被捡起时,可以捡起与MRI相关的宝石。红宝石是jruby吗?

我还需要将其移植到MySQL而不是SQLITE。我需要在这里用于Ruby和Jruby的哪些宝石?

为了记录,我使用的是Ubuntu 11.04,Ruby 1.9.2-P290,Jruby 1.6.4和Rails 3.0.9或3.0.10。

有帮助吗?

解决方案

去年,我们向Jruby开设了大型栏杆申请,这是一件令人惊讶的工作。当然,其中一部分与该应用程序的写作相当不好,并且具有很多旧的代码,但仍然如此。如果您想知道:我们的大多数问题都来自我们使用的宝石,那时有时会依靠当时无法与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

两种表格都很好,因为

所有涉及组的操作(捆绑安装,bundler.setup,bundler.require)的行为与明确排除了不匹配当前平台的任何组完全相同。

作为mysql的宝石,我会使用恰当的命名 mysql, ,似乎有一个 jdbc-mysql 对于jruby。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top