4

我正在开发 Rails 3.1,并且正在使用默认的 uglifier 资产 gem。该 gem 依赖于 execjs,它需要 JavaScript 运行时。我在 Mac OSX 上开发,所以我从来没有遇到过麻烦。另一位开发人员使用 Linux,默认情况下它没有 JavaScript 运行时。因此,使用嵌入在 Ruby 中的 JavaScript 运行时 therubyracer 工作得很好,但我希望 Bundler 仅在系统是 Linux 时安装它。我可以在 Gemfile 中指定它以便它只安装在 Linux 而不是 Mac 中吗?

4

2 回答 2

6

你可以做;

gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i

在您的情况下用适当的宝石和平台替换宝石和平台。

于 2011-08-19T06:08:32.837 回答
3

这种方法的问题在于,如果 OS X 系统更新 Gemfile.lock,gem 将被包含在内。如果其他开发人员更新 gemfile 中的任何 gem,这将成为问题,因为 bundler 在计算依赖项时不会包含 gem。

我解决此类问题的方法是手动安装我想要的 gem,然后需要两者:

begin
  require 'os-x-gem'
rescue LoadError
end
begin
  require 'linux-gem'
rescue LoadError
end
于 2011-08-19T13:14:17.170 回答