--deployment标志需要Gemfile.lock

时间:2013-02-10 08:49:50

标签: ruby-on-rails-3 capistrano

我花了几个小时但却无法解决这个问题。

当我尝试使用capistrano将本地rails应用部署到生产服务器时,出现以下错误:

The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying.

关于如何解决这个问题的任何想法?

我的rails应用程序文件夹使用Git进行版本控制。我已将本地git repo推送到github,并且github上有Gemfile.lock。所以它受版本控制。然而,卡尼斯特拉诺继续给出同样的错误。

Deploy.rb文件:https://gist.github.com/brahmadpk/4748991

6 个答案:

答案 0 :(得分:7)

确保版本文件夹中没有任何内容不是版本。有关详细信息,请参阅this comment on a bundler issue

这篇名为Capistrano Deployment Trouble的博客文章解释了同样的问题。

编辑包括评论中讨论的结论

deploy_to param没有设置为绝对路径;因此capistrano无法找到要部署的文件夹,从而导致出现此错误消息。

答案 1 :(得分:4)

我用以下方法解决了这个问题:

set :bundle_gemfile, "your_app_name/Gemfile"
deploy.rb中的

答案 2 :(得分:1)

BUNDLE_FROZEN: "true"文件中删除.bundle/config,然后再次运行bundle

答案 3 :(得分:0)

运行bundle并将Gemfile.lock添加到您的版本控制中。

答案 4 :(得分:0)

即使我在releases文件夹中没有文件或文件夹,我也遇到了同样的问题。原来这是一个愚蠢的小事:由于某种原因,我的仓库中的gemfile.lock文件是小写,而capistrano需要Gemfile.lock并且大写G 。 / p>

这就是我解决它的方法:

  1. 删除gemfile.lock
  2. 从您的repo(git rm ...)
  3. 删除gemfile.lock
  4. 运行bundle install
  5. 将新的Gemfile.lock文件添加到您的仓库:git add Gemfile.lock
  6. 从服务器中删除文件夹(不知道是否确实需要这样做,无论如何都要这样做)
  7. 部署

答案 5 :(得分:-2)

我得到完全相同的问题。

我的发行版文件夹中没有任何内容(根本就是 - 我的部署冷却不断回滚)。

我的gemfile.lock已签入Subversion。

我明白了:

** [out :: localhost] The --deployment flag requires a Gemfile.lock. Please make sure you   have checked your Gemfile.lock into version control before deploying.

有没有办法停止回滚,以便我可以看到发行文件夹在尝试运行时的样子

cd /var/qlarity/releases/20130222003607 && bundle install --gemfile /var/qlarity/releases/20130222003607/Gemfile --path /var/qlarity/shared/bundle --deployment --quiet --without development test

后来....

我发现我可以通过注释掉

中显示的代码来阻止回滚
gems\capistrano-2.14.1\lib\capistrano\recipes\deploy.rb

task :update_code, :except => { :no_release => true } do
  # on_rollback { run "rm -rf #{release_path}; true" }
  strategy.deploy!
  finalize_update
end

这使我能够检查我的版本文件夹,果然,其中没有Gemfile.lock。结果我在Rails项目文件结构中得到了一个不必要的文件夹,而不是

myapp/trunk/app
myapp/trunk/config
...
myapp/trunk/Gemfile

我有

myapp/trunk/myapp/app
myapp/trunk/myapp/config
...
myapp/trunk/myapp/Gemfile

这意味着我最终得到了一个包含我的Gemfile

的文件夹
releases/nnnn/myapp

和bundle正在寻找

中的Gemfile
releases/nnnn

当我从

更改我的Capistrano配置时
deploy.rb 

set :repository, "file:///D:/_SVN//myapp/trunk"

deploy.rb 

set :repository, "file:///D:/_SVN//myapp/trunk/myapp"
现在一切都很好。真的应该看看下一步修复文件夹结构了!