Bundler:您正在尝试在更改Gemfile后以部署模式安装

Jel*_*Cat 82 capistrano ruby-on-rails bundler

我对bundler和capistrano很新,我试图将它们一起使用.当我尝试部署时,我收到消息:

您正在尝试在更改Gemfile后以部署模式安装.在别处运行`bundle install'并将更新的Gemfile.lock添加到版本控制.

我不知道如何满足抱怨的系统,我不明白为什么抱怨会出现,因为我在文档中读到:

如果Gemfile.lock确实存在,并且您已更新Gemfile(5),则bundler将使用Gemfile.lock中的依赖项来处理您未更新的所有gem,但会重新解析您更新的gem的依赖项.您可以在CONSERVATIVE UPDATING下找到有关此更新过程的更多信息.

我认为这意味着Bundler可以处理我的Gemfile不是它预期的事实.有帮助吗?

规格:Ruby 1.9.3,Rails 3.2.3,Capistrano 2.12.0,Bundler 1.1.4,Windows 7,部署到Posix机器.

编辑:我的Gemfile包含如下逻辑块:

unless RbConfig::CONFIG['host_os'] === 'mingw32'
  # gem 'a' ...
end
Run Code Online (Sandbox Code Playgroud)

Edd*_*gan 75

您收到的错误消息Gemfile.lock可能是因为您Gemfile并且Gemfile.lock彼此不同意.听起来你上次运行bundle install(或update)后你的Gemfile中已经改变了一些东西.当你bundle install,它使用你对Gemfile所做的任何更改来更新你的Gemfile.lock.

确保您在bundle install本地运行,并在此之后签入源代码控制您新更新的Gemfile.lock内容.然后尝试部署.

编辑:正如评论中所认识到的,Gemfile中的条件导致一个平台上的有效Gemfile.lock,另一个平台上无效.在Gemfile中为这些与平台相关的gem 提供:platform标志应解决不对称问题.

  • 听起来像是正确的答案,但我确实在开发机器上运行了bundle install,然后检查了Gemfile及其对svn的锁定,然后使用了capistrano。问题可能是因为Gemfile包含一个带有以下内容的块:除非RbConfig :: CONFIG ['host_os'] ==='mingw32'`?(因此,它应该在我的Windows计算机上与在Linux服务器上捆绑不同的项目。) (2认同)
  • 使用我的prod(posix)服务器需要但不在我的dev(win)服务器上的gems的`:platforms`标志产生了不同:`platforms:ruby do; 宝石'mygem'; ...; 结束`(如果您不介意将此说明添加到答案中,您将获得绿色检查.) (2认同)

Gau*_*v24 25

vi .bundle/config

将BUNDLE_FROZEN选项从"1"更改为"0"

做"捆绑安装"


要么

运行"捆绑配置"

查看"冻结"值是否为true将其设置为false

bundle config frozen false


Jos*_*ter 19

注意全局Bundler配置.

我的开发环境中有一个全局配置,~/.bundle/config因为我在我的CI /生产环境中没有导致Gemfile.lock我在开发环境中生成的配置与我的CI /生产环境中的配置不同.

在我的情况下,我github.https在我的开发环境中设置为true,但在我的CI /生产环境中没有这样的配置.这导致两个Gemfile.lock文件不同.

  • 谢谢!所有简单的答案都与这个荒谬的错误有关 - 这就是让我重新开始工作的原因.为什么Heroku不能自动协助这个?失去我生命中最后3个小时的蹩脚理由! (2认同)
  • 你可能只是救了我的命.我准备好为此拍摄自己:P (2认同)

l3x*_*l3x 10

当你看到以下内容......

$ bundle install
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`.

You have added to the Gemfile:
* source: rubygems repository https://rubygems.org/
* rails (~> 3.2)
. . .
Run Code Online (Sandbox Code Playgroud)

...然后,问题很可能是您的供应商/缓存目录中的.gem文件已过时.

也许,你之前运行过$bundle install --deployment哪些"过时的".gem文件放在缓存中?

无论如何,您可以通过运行以下命令来解决此错误: bundle install --no-deployment

这是Rails的众多优点之一...错误消息通常会告诉您如何解决问题.


Giu*_*ppe 6

我的具体问题与@JoshPinter报告的内容有关,即,捆绑程序从github检索gem所使用的协议中的dev-vs-deploy主机差异。

长话短说,我所要做的就是修改以下Gemfile条目...

gem 'activeadmin', github: 'activeadmin'
Run Code Online (Sandbox Code Playgroud)

...对此安全语法(请参阅参考资料):

gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'
Run Code Online (Sandbox Code Playgroud)

而且我的部署已恢复正常。


dac*_*ter 5

我的解决方案与此处列出的其他解决方案略有不同.我试图从sidekiq升级到sidekiq-pro(需要捆绑器1.7.12+),但是我一直在从travis-ci获得"你正在尝试在更改Gemfile后以部署模式安装"消息

检查travis-ci的控制台输出显示正在使用旧版本的bundler.

就我而言,我必须编辑travis.yml文件来添加:

before_install: - gem update bundler

这迫使travis-ci使用最新版本的bundler,并使错误消息消失.


Wil*_*ken 5

我不在乎。这就是我所做的。它修复了它。

rm -rf .bundle 
rm -rf Gemfile.lock
bundle install
Run Code Online (Sandbox Code Playgroud)