Bundler:您正在尝试在更改Gemfile后以部署模式进行安装
我对bundler和capistrano很新,我正在尝试将它们一起使用。 当我尝试部署时,我收到以下消息:
您正在尝试在更改Gemfile后以部署模式进行安装。 在别处运行`bundle install'并将更新的Gemfile.lock添加到版本控制。
我不知道如何去满足抱怨的系统,我不明白为什么投诉会出现,因为我在doc中读到:
如果Gemfile.lock确实存在,并且已经更新了Gemfile(5),bundler将使用Gemfile.lock中的依赖关系来处理所有未更新的gem,但会重新parsing您更新的gem的依赖关系。 您可以在CONSERVATIVE UPDATING下find更多关于此更新过程的信息。
我认为这意味着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
你得到关于Gemfile.lock
的错误信息可能是因为你的Gemfile
和Gemfile.lock
不一致。 这听起来像你自上次运行bundle install
(或update
)以来,已经在Gemfile中更改了某些内容。 当你bundle install
,它会更新你的Gemfile.lock与您对Gemfile所做的任何更改。
确保你在本地运行bundle install
,然后检查你的新更新的Gemfile.lock
。 然后尝试部署。
编辑 :正如在注释中所认可的,Gemfile中的条件导致在一个平台上有效的Gemfile.lock,在另一个平台上无效。 在Gemfile中为这些依赖于平台的gem提供一个平台标志可以解决这种不对称问题。
vi .bundle / config
将BUNDLE_FROZEN选项从“1”更改为“0”
做“捆绑安装”
要么
运行“捆绑configuration”
看看“冻结”的值是否为true将其设置为false
捆绑configuration冻结错误
注意全局的Bundlerconfiguration。
我在~/.bundle/config
中的开发环境中有一个全局configuration,我在CI / Production环境中没有导致在我的开发环境中生成的Gemfile.lock
与我的CI /生产环境。
在我的情况下,我在我的开发环境github.https
设置为true,但在CI / Production环境中没有这样的configuration。 这导致两个Gemfile.lock
文件是不同的。
当你看到以下…
$ 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) . . .
…然后,问题很可能是您的供应商/caching目录中存在过期的.gem文件。
也许,你以前运行过$bundle install --deployment
–deployment,在caching中放置了一些“过时”的.gem文件?
在任何情况下,您都可以通过运行以下命令来解决此错误: bundle install --no-deployment
这是Rails许多伟大的事情之一…错误消息经常告诉你如何解决这个问题。
我的解决scheme与此处列出的其他解决scheme略有不同。 我试图从sidekiq升级到sidekiq-pro(这需要捆绑1.7.12 +),但我不断得到“你正试图安装在部署模式后更改您的Gemfile”消息从Travis-ci
检查travis-ci的控制台输出结果显示使用的是旧版本的bundler。
在我的情况下,我不得不编辑travis.yml文件来添加:
before_install: - gem update bundler
这迫使travis-ci使用最新版本的bundler,并使错误消息消失。
我的具体问题是与@JoshPinter报告的内容有关,也就是说,捆绑器用于从github检索gem的协议中的dev-vs-deploy主机差异。
长话短说,我只需要修改下面的Gemfile
条目…
gem 'activeadmin', github: 'activeadmin'
…这个安全的语法( 见参考 ):
gem 'activeadmin', git: 'https://github.com/activeadmin/activeadmin.git'
我的部署恢复正常。
我遇到过类似的事情。 解决这个问题的方法之一,我认为,但可能需要更多的空间在你的服务器上,而不是你想要的,就是运行
bundle install --deployment
然后尝试部署。 这样做就像把所有的gem安装到供应商文件夹,我相信通常是很好的避免…但仍然可能工作。 我的应用过去像这样,我的解决scheme是从我的Gemfile中删除精确的版本,然后重新绑定和部署。
gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git', :branch => 'master'
至
gem 'rails_admin'
或者你可以做它build议的事情,把你的项目从生产服务器上拖到本地机器上,捆绑它,然后重新安装到你的服务器上。 这个解决scheme可能不是100%正确的,但其中一些对我来说是工作的…只是以为我会分享。 祝你好运
错误的另一个原因是:
这有点愚蠢,但我相信别人会犯同样的错误。
对于Rails 4,Heroku添加了gem rails_12factor。 如果您在添加之前使用它,那么您将拥有这两个gem:
gem 'rails_log_stdout', github: 'heroku/rails_log_stdout' gem 'rails3_serve_static_assets', github: 'heroku/rails3_serve_static_assets'
你添加新的时候你必须删除它们。 (他们包括在内)。 我认为你可以逃避,直到你碰到你的gem文件中的行,然后Heroku注意到重复,并与上述错误哭出来。
祝你好运与Rails 4。
在我们的例子中,我们使用的是在我们的生产机器上运行的旧版本的捆绑器中没有的function。 因此,升级捆绑器就足够了,也就是做一个gem update bundler
。
rm -fr .bundle
解决了我的问题。
我遇到了一些gem更新后部署Nesta应用程序。 对我来说有效的是删除Gemfile.lock ,运行bundle install
重新生成它,然后再次部署。
我碰到类似的问题,但我bundle install
和bundle update
和Heroku仍然拒绝我的推。
我通过删除Gemfile.lock然后再次运行bundle install
。 然后,我添加,承诺,并推到我的git回购。 之后我没有问题推到Heroku。
对于heroku,您不必更改Gemfile
的语法。 您可以添加BUNDLE_GITHUB__HTTPS
(注意双下划线)作为环境variables,并将其设置为true
(在configurationvariables部分的Settings
选项卡下的heroku应用程序仪表板中)。 这将会把协议从git://
切换到https://
。
这可能是一个危险的想法,但是如果绝对必须在生产部署环境中testing某些东西,则可以编辑.bundle / config文件
# This value is normally '1' # Set it to '0' BUNDLE_FROZEN: '0'
现在调用捆绑包,在我的情况下,我需要更新一个特定的gem,所以这是我的命令
RAILS_ENV=production bundle update <whatever gem>
更新之后,你应该把它改回来,所以事情就像你期待的那样。 再次,这可能是不受支持的,YMMV
试图推送到Heroku时,我有错误信息。 我发现以下解决scheme已修复。
- Git拉来源大师
- Git状态
- Git提交
- Git推送起源大师
- Git推heroku高手