2011-08-19 20 views
4

我正在开发Rails 3.1,并使用默认的uglifier资产宝石。该gem依赖于execjs,这需要JavaScript运行时。我在Mac OSX上开发,所以我从来没有遇到过麻烦。另一位开发人员使用Linux,默认情况下它没有JavaScript运行时。因此,使用therubyracer,嵌入在Ruby中的JavaScript运行时,效果很好,但是我希望Bundler只有在系统是Linux时才安装它。我可以在Gemfile中指定它,所以它只能安装在Linux而不是Mac?捆绑软件可以将宝石安装限制到某个操作系统吗?

回答

6

你可以做;

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

取代你的情况下适当的宝石和平台。

+0

这仍然安装的宝石,是不是?如果不是Linux,我正在寻找一种在'bundle install'中跳过它的方法。 –

+0

@Jonathan C.我不认为它会,你试过吗? – rubish

+0

@rubish是的,它仍然安装它。 ':require => false'仅用于防止打包程序在运行时需要该库,即您需要在自己的代码中手动执行。 –

3

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

我对解决此类问题的方法是手动安装我想要的宝石,然后需要两个:

begin 
    require 'os-x-gem' 
rescue LoadError 
end 
begin 
    require 'linux-gem' 
rescue LoadError 
end 
+0

但是这会失败,如果用户在Linux上,因为'require'os-x-gem“'会导致加载错误并且永远不会需要linux gem。这两个宝石都需要自己的开始救援块。 – rubish

+0

优点,我错过了。我更新了示例以更正此问题。 –

相关问题