Ruby on rails Bundler:更改文件后,您正在尝试以部署模式安装
我对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机器 编辑:我的文件包括如下逻辑块: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的依
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