无法更新生产服务器上的gem。
我已尝试bundle install --deployment
和bundle install --without development test
但继续得到:
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.
If this is a development machine, remove the Gemfile freeze
by running `bundle install --no-deployment
我不知道这是否正确,但需要快速修复。我运行bundle install --no-deployment
然后bundle update
然后再次运行bundle install --deployment
答案 0 :(得分:46)
说明书可能有点令人困惑。它说你已经修改了你的开发机器上的Gemfile
并推送了这些更改,而不是在提交更改之前运行bundle install
。
通过运行bundle install
,您将更新Gemfile.lock
文件。这应该推送到您的服务器,因为它比Gemfile
更重要。考虑Gemfile
Gemfile.lock
文件的计划{/ 1}}。
永远记住:
bundle install
,请运行Gemfile
,即使只是为了确保。如果它太慢,请通过--local
强制它仅使用本地宝石来解析其依赖关系。Gemfile
和Gemfile.lock
文件提交到您的存储库Gemfile
和Gemfile.lock
部署到生产服务器,以确保它们运行与开发环境完全相同的依赖项。单独运行bundle update
可能会被视为危险,它会更新所有应用程序的依赖关系。如果您没有Gemfile
中指定的固定版本号,则主要是危险的。我wrote about it here.
答案 1 :(得分:9)
FWIW我有这个问题并通过从我的Gemfile中删除一些条件语句(OS上的条件)并重新运行bundle来修复它。
答案 2 :(得分:7)
仅供参考:如果您使用这样的源块,也可能会出现此错误:
source 'https://rails-assets.org' do
gem 'rails-assets-jquery'
end
你会在Gemfile.lock中看到这个宝石的感叹号:
rails-assets-jquery!
只需正常定义其他来源,即
source 'https://rails-assets.org'
gem 'rails-assets-jquery'
(BTW cf. here关于使用多个宝石来源。)
答案 3 :(得分:3)
这可能是由您正在部署到的服务器上的旧版本的bundler gem引起的(在本例中为生产)。登录服务器并运行gem update bundler
为我解决了问题。我部署的服务器运行的是1.7.4版本,当前版本是1.9。
答案 4 :(得分:2)
我的生产服务器仍然使用旧版本的gem时出现问题,即使Gemfile.lock显示正确的更新版本。我的生产服务器在Unicorn上运行 - 并且关闭/重新启动它再次修复了问题 - 而不是发送HUP信号,它确实解决了所有问题。
答案 5 :(得分:1)
捆绑安装在我的“开发”机器上失败了...
我还需要快速修复。所以我将repo克隆到生产机器上的一个新文件夹,在那里运行“bundle install”并将Gemfile.lock提交到repo。
答案 6 :(得分:1)
我遇到了这个问题(Ubuntu 12.10& 12.04,其中一个代理服务器)。
我的问题是我在Gemfile中有一些git://
协议。将此更改为http://
帮助我完成所有工作。