Bundler error on deployment

萝らか妹 提交于 2019-12-03 05:54:57

问题


I'm currently using guard i.e. guard-coffeescript gem to compile my javascript (and in the future I'll probably add some more guard tasks) on my OSX dev system. I added the rb-fsevent gem to my Gemspec, now I saw that in a lot of Gemspecs it is added with an if statement like this:

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

Trying to deploy to my staging/production environment, which is running under Linux, the script executed on the server uses the bundle install --deployment results in following exception:

# 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

Is there a way around this problem or do I just have to remove the if so that I can deploy to my system and in turn installing a gem that is useless on a non OSX platform?

--

edit: I run bundle install before deploying to my staging environment and run bundle check after the first time it failed. I got it running after removing the if statement..


回答1:


I had a similar problem. If you're using capistrano you can set the following option:

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

Then wrap your gem 'rb-fsevent' line in a group called darwin. Something like this should work nicely:

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

This makes bundler do this on the server:

bundle --without darwin development test

Which means that it ignores those groups in the Gemfile.lock. What you were doing would make you OS X machine and your server come up with different resulting lock files. Which is why it was complaining.




回答2:


I had the exact same issue and Luke's solution fixed it for me, however, only after I removed the :require => false if RUBY_PLATFORM =~ /darwin/i string that is commonly used.




回答3:


As described in

https://github.com/guard/guard

the solution is simply

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


来源:https://stackoverflow.com/questions/6472785/bundler-error-on-deployment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!