Ruby on rails bundler能否将gem安装约束到某个操作系统?
我正在开发Rails 3.1,并使用默认的uglifier资产gem。这个gem依赖于execjs,它需要一个JavaScript运行时。我在MacOSX上开发,所以从来没有遇到过问题。另一个开发人员使用Linux,默认情况下Linux没有JavaScript运行时。因此,使用Ruby中嵌入的JavaScript运行时therubyracer工作得很好,但我希望Bundler仅在系统为Linux时安装它。我可以在GEM文件中指定它,以便它只安装在Linux而不是Mac上吗?您可以这样做Ruby on rails bundler能否将gem安装约束到某个操作系统?,ruby-on-rails,bundler,gemfile,Ruby On Rails,Bundler,Gemfile,我正在开发Rails 3.1,并使用默认的uglifier资产gem。这个gem依赖于execjs,它需要一个JavaScript运行时。我在MacOSX上开发,所以从来没有遇到过问题。另一个开发人员使用Linux,默认情况下Linux没有JavaScript运行时。因此,使用Ruby中嵌入的JavaScript运行时therubyracer工作得很好,但我希望Bundler仅在系统为Linux时安装它。我可以在GEM文件中指定它,以便它只安装在Linux而不是Mac上吗?您可以这样做 gem
gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
在您的情况下,使用合适的gem和平台替换gem和平台。这种方法的问题是,如果OS X系统更新Gemfile.lock,gem将包括在内。如果其他开发人员更新gem文件中的任何gem,这将成为问题,因为bundler在计算依赖项时不会包括gem 我解决这类问题的方法是手动安装我想要的gem,然后同时需要:
begin
require 'os-x-gem'
rescue LoadError
end
begin
require 'linux-gem'
rescue LoadError
end
这还是安装gem,不是吗?我正在寻找一种方法,在
捆绑安装过程中跳过它,如果它不是Linux的话。@rubish是的,它仍然安装它:require=>false
仅用于防止bundler在运行时需要库,即您在自己的代码中手动需要库。@Jonathan C.不是:require=>false
,而是如果RUBY_PLATFORM=~/darwin/i
应该做到这一点,@Luke Cowell指出的问题是什么,使用Gemfile.lock是值得注意的,但如果用户在linux上,这将失败,因为需要“os-x-gem”
将失败,导致加载错误,并且永远不需要linux gem。两颗宝石都需要自己的“开始救援”积木。好极了,我错过了。我已经更新了示例以更正此问题。