我正在开发Rails 3.1,并使用默认的uglifier资产gem。该gem依赖于execjs,这需要JavaScript运行时。我在Mac OSX上开发,所以我从未遇到过麻烦。另一个开发人员使用Linux,默认情况下没有JavaScript运行时。所以使用therubyracer,一个嵌入在Ruby中的JavaScript运行时工作得非常好,但我希望Bundler只在系统是Linux的情况下安装它。我可以在Gemfile中指定这个,所以它只能安装在Linux而不是Mac吗?
答案 0 :(得分:6)
gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
在您的情况下用适当的宝石和平台替换宝石和平台。
答案 1 :(得分: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