2011-06-24 51 views
16

我目前正在使用guard,即guard-coffeescript gem在我的OSX dev系统上编译我的javascript(以及将来我可能会添加一些更多的警卫任务)。我加入了rb-fsevent宝石我Gemspec,现在我看到了很多Gemspecs它被加上if语句是这样的:Bundler部署错误

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

尝试部署到我的分期/生产环境,这是在Linux下运行,在服务器上执行的脚本使用bundle install --deployment导致以下情况除外:

# bundle install --deployment 
You have modified your Gemfile in development but did not check 
the resulting snapshot (Gemfile.lock) into version control 

You have deleted from the Gemfile: 
* rb-fsevent

有没有解决这个问题的方法还是我只需要删除,如果这样我就可以部署到我的系统,并反过来安装在非OSX平台上无用的宝石?

-

编辑:我部署到我登台环境之前运行bundle install和它第一次失败后,运行bundle check。我删除了if语句后运行它..

+0

我不明白为什么,如果RUBY_PLATFORM条件是不是在Gemfile.lock的?当你在服务器上安装捆绑安装时,不只是看一下Gemfile.lock? – jspooner

回答

23

我有一个类似的问题。如果您使用Capistrano的,你可以设置以下选项:

set :bundle_without, [:darwin, :development, :test] 

然后换你的宝石“RB-fsevent”线称为达尔文小组。这样的事情应该很好地工作:

group :test, :darwin do 
    gem 'rb-fsevent' 
end 

这使得打捆做到这一点的服务器上:

bundle --without darwin development test 

这意味着它忽略了Gemfile.lock的那些组。你在做什么会让你OS X机器和你的服务器拿出不同的结果锁文件。这就是它抱怨的原因。

+1

感谢您的提示,真的好像没有办法如何使用bundle install --deployment来做到这一点。 – Mark

+1

由于某种原因,给了我一个错误,但是这工作'set:bundle_without,%w {达尔文开发测试} .join('')'。这可能是一个capistrano 3的事情。 – counterbeing

+0

认真考虑@David建议并删除':require => false如果RUBY_PLATFORM =〜/ darwin/i' –

6

我有完全相同的问题,卢克的解决方案为我解决了它,但是,只有在我删除了通常使用的:require => false if RUBY_PLATFORM =~ /darwin/i字符串后。

2

正如

https://github.com/guard/guard

描述的解决方案是简单地

group :development do 
    gem 'rb-inotify', :require => false 
    gem 'rb-fsevent', :require => false 
    gem 'rb-fchange', :require => false 
end 
+0

这对我有用(只是删除'if RUBY_PLATFORM ...'部分的行)。 – benzado