无法更新生产服务器上的gem

时间:2011-07-22 04:21:10

标签: ruby ruby-on-rails-3 rubygems

无法更新生产服务器上的gem。

我已尝试bundle install --deploymentbundle 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

7 个答案:

答案 0 :(得分:46)

说明书可能有点令人困惑。它说你已经修改了你的开发机器上的Gemfile并推送了这些更改,而不是在提交更改之前运行bundle install

通过运行bundle install,您将更新Gemfile.lock文件。这应该推送到您的服务器,因为它比Gemfile更重要。考虑Gemfile Gemfile.lock文件的计划{/ 1}}。

永远记住:

  1. 如果您更改bundle install,请运行Gemfile,即使只是为了确保。如果它太慢,请通过--local强制它仅使用本地宝石来解析其依赖关系。
  2. 两者 GemfileGemfile.lock文件提交到您的存储库
  3. GemfileGemfile.lock部署到生产服务器,以确保它们运行与开发环境完全相同的依赖项。

  4. 单独运行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)

由于osx上的mysql-gem,

捆绑安装在我的“开发”机器上失败了...

我还需要快速修复。所以我将repo克隆到生产机器上的一个新文件夹,在那里运行“bundle install”并将Gemfile.lock提交到repo。

答案 6 :(得分:1)

我遇到了这个问题(Ubuntu 12.10& 12.04,其中一个代理服务器)。 我的问题是我在Gemfile中有一些git://协议。将此更改为http://帮助我完成所有工作。