Bundler在部署时出错

Mar*_*ark 16 linux macos ruby-on-rails guard bundler

我目前正在使用guard即guard-coffeescript gem来编译我的javascript(以及将来我可能会在我的OSX开发系统上添加一些更多的保护任务).我在rb-fsevent我的Gemspec中添加了gem,现在我在很多Gemspecs中看到它添加了if语句,如下所示:

gem 'rb-fsevent', :require => false if RUBY_PLATFORM =~ /darwin/i
Run Code Online (Sandbox Code Playgroud)

尝试部署到在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
Run Code Online (Sandbox Code Playgroud)

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

-

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

Luk*_*ell 23

我遇到了类似的问题.如果您使用的是capistrano,则可以设置以下选项:

set :bundle_without, [:darwin, :development, :test]
Run Code Online (Sandbox Code Playgroud)

然后将你的gem'rb-fsevent'行包装在一个名为darwin的组中.像这样的东西应该很好地工作:

group :test, :darwin do
  gem 'rb-fsevent'
end
Run Code Online (Sandbox Code Playgroud)

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

bundle --without darwin development test
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*vid 6

我有完全相同的问题,并且Luke的解决方案为我修复了它,但是,只有在我删除了:require => false if RUBY_PLATFORM =~ /darwin/i常用的字符串之后.