Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails bundler能否将gem安装约束到某个操作系统?_Ruby On Rails_Bundler_Gemfile - Fatal编程技术网

Ruby on rails bundler能否将gem安装约束到某个操作系统?

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

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

您可以这样做

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。两颗宝石都需要自己的“开始救援”积木。好极了,我错过了。我已经更新了示例以更正此问题。