Ruby on rails Bundler:更改文件后,您正在尝试以部署模式安装

Ruby on rails Bundler:更改文件后,您正在尝试以部署模式安装,ruby-on-rails,capistrano,bundler,Ruby On Rails,Capistrano,Bundler,我对bundler和capistrano还很陌生,我正在尝试将它们结合使用。当我尝试部署时,会收到以下消息: 更改文件后,您正在尝试以部署模式安装。在别处运行“bundle install”,并将更新的Gemfile.lock添加到版本控制中 我不知道如何满足投诉系统的要求,我也不明白为什么会出现投诉,因为我读到: 如果确实存在Gemfile.lock,并且您已经更新了Gemfile(5), bundler将对所有gem使用Gemfile.lock中的依赖项 您没有更新,但将重新解析gems的依

我对bundler和capistrano还很陌生,我正在尝试将它们结合使用。当我尝试部署时,会收到以下消息:

更改文件后,您正在尝试以部署模式安装。在别处运行“bundle install”,并将更新的Gemfile.lock添加到版本控制中

我不知道如何满足投诉系统的要求,我也不明白为什么会出现投诉,因为我读到:

如果确实存在Gemfile.lock,并且您已经更新了Gemfile(5), bundler将对所有gem使用Gemfile.lock中的依赖项 您没有更新,但将重新解析gems的依赖关系 你确实更新了。您可以找到有关此更新的更多信息 在保守更新下进行以下处理

我认为这意味着Bundler可以处理这样一个事实,即我的Gemfile不是它所期望的。有什么帮助吗

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

编辑:我的文件包括如下逻辑块:

unless RbConfig::CONFIG['host_os'] === 'mingw32'
  # gem 'a' ...
end

我以前也遇到过类似的事情。我认为有一种方法可以解决这个问题,但可能会占用服务器上比您想要的更多的空间,那就是运行

bundle install --deployment 
然后尝试部署。这就像是将所有gem安装到供应商文件夹中,我相信这通常是可以避免的。。。但可能仍然有效。我的应用程序过去是这样运行的,我的解决方案是删除要从我的Gemfile中下载的确切版本,然后重新引导和部署

gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'


或者,您可以按照它的建议,将您的项目从生产服务器转移到本地机器上,打包,然后重新发布到您的服务器上。这个解决方案可能不是100%正确,但其中一些对我有效。。。我只是想和你分享。Goodluck

您收到的有关
Gemfile.lock
的错误消息可能是因为您的
Gemfile
Gemfile.lock
不一致。听起来,自从上次运行
bundle安装
(或
update
)以来,您在GEM文件中更改了一些内容。当您
捆绑安装时
,它会用您对Gemfile所做的任何更改更新您的Gemfile.lock

确保您在本地运行
bundle install
,然后签入新更新的
Gemfile.lock
。然后尝试部署


编辑:如评论中所述,Gemfile中的条件导致一个平台上的Gemfile.lock有效,另一个平台上的Gemfile.lock无效。在GEM文件中为这些平台相关的GEM提供一个标志应该可以解决这种不对称性。

当您看到以下内容时

$ 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)
. . .
。。。然后,问题很可能是您的vendor/cache目录中有过时的.gem文件

也许,您以前运行过
$bundle install--deployment
,它在缓存中放置了一些“过时的”.gem文件

在任何情况下,您都可以通过运行以下命令来克服此错误:
bundle install--no deployment


这是Rails的许多优点之一。。。错误消息通常会准确地告诉您如何解决问题。

错误的另一个原因:

这有点愚蠢,但我相信其他人也会犯同样的错误

对于Rails 4,Heroku添加了gem Rails_12因子。如果您在他们添加它之前使用它,那么您将拥有以下两个宝石:

gem 'rails_log_stdout',  github: 'heroku/rails_log_stdout'
gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'
添加新的时,必须将其删除。(包括在内)。我认为你可以逃脱它,直到你在你的gem文件中触摸到它们的行,然后Heroku注意到重复并大声说上面的错误


祝Rails 4好运。

在一些gem更新之后,我在部署Nesta应用程序时遇到了这个问题。对我来说,有效的方法是删除Gemfile.lock,运行
bundle install
重新生成它,然后重新部署。

我遇到了类似的问题,但是我同时执行了
bundle install
bundle update
,Heroku仍然拒绝了我的推送

我修复了这个问题,只需删除Gemfile.lock,然后再次运行
bundle install
。然后我添加、承诺并将其推送到我的git回购。在那之后,我推到Heroku没有问题。

vi.bundle/config

将捆绑包\u冻结选项从“1”更改为“0”

是否进行“捆绑安装”


运行“bundle配置”

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


bundle config freezed false

在本例中,我们使用的是在生产机器上运行的旧版本bundler中没有的功能。因此,升级bundler就足够了,即执行
gem更新bundler

我的解决方案与此处列出的其他解决方案略有不同。我试图从sidekiq升级到sidekiq pro(需要bundler 1.7.12+),但我一直收到travis ci的“更改Gemfile后,您正在尝试以部署模式安装”消息

检查travis ci的控制台输出时发现正在使用旧版本的bundler

在我的例子中,我必须编辑travis.yml文件以添加:


安装前:
-gem更新绑定器

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

rm -fr .bundle
为我解决了这个问题。

请注意全局绑定器配置。 我在开发环境的
~/.bundle/config
中有一个全局配置,而我在CI/生产环境中没有全局配置,这导致在开发环境中生成的
Gemfile.lock
与在CI/生产环境中生成的不同


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

我的具体问题与
rm -fr .bundle
gem 'activeadmin', github: 'activeadmin'
gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'
# This value is normally '1' 
# Set it to '0'
BUNDLE_FROZEN: '0'
RAILS_ENV=production bundle update <whatever gem>
bundle install --no-deployment
rm -rf .bundle 
rm -rf Gemfile.lock
bundle install