16

我目前正在使用guard ieguard-coffeescript gem 在我的OSX 开发系统上编译我的javascript(将来我可能会添加更多的保护任务)。我将rb-fseventgem 添加到我的 Gemspec 中,现在我看到在很多 Gemspecs 中添加了这样的 if 语句:

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

有没有办法解决这个问题,还是我只需要删除 if 以便我可以部署到我的系统,然后安装一个在非 OSX 平台上无用的 gem?

--

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

4

3 回答 3

23

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

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

然后将您的 gem 'rb-fsevent' 行包装在一个名为 darwin 的组中。像这样的东西应该很好用:

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

这使得捆绑器在服务器上执行此操作:

bundle --without darwin development test

这意味着它会忽略 Gemfile.lock 中的那些组。你所做的会让你的 OS X 机器和你的服务器产生不同的锁定文件。这就是它抱怨的原因。

于 2011-08-11T05:14:33.190 回答
6

我遇到了完全相同的问题,Luke 的解决方案为我解决了这个问题,但是,只有在我删除了:require => false if RUBY_PLATFORM =~ /darwin/i常用的字符串之后。

于 2011-08-30T19:58:43.507 回答
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
于 2012-11-30T19:45:34.013 回答