7

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

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

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,Gemfile.lock 就在 github 上。所以它在版本控制之下。然而 capistrano 继续给出同样的错误。

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

4

6 回答 6

12

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

于 2018-12-10T10:39:51.130 回答
7

确保发布文件夹中没有任何内容不是发布。有关更多详细信息,请参阅有关捆绑程序问题的此评论。

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

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

参数未deploy_to设置为绝对路径;因此capistrano无法找到要部署的文件夹,导致此错误消息。

于 2013-02-10T09:22:53.773 回答
4

我解决了这个问题:

set :bundle_gemfile, "your_app_name/Gemfile"

在 deploy.rb

于 2013-07-08T13:10:23.603 回答
0

即使发布文件夹中没有文件或文件夹,我也遇到了同样的问题。原来这是一件愚蠢的小事:我的 repo 中的 gemfile.lock 文件是小写的出于某种原因的,而 capistrano 需要 Gemfile.lock 和大写 G

这就是我解决它的方法:

  1. 删除 gemfile.lock
  2. 从你的 repo 中删除 gemfile.lock (git rm ...)
  3. bundle install
  4. 将新的 Gemfile.lock 文件添加到您的存储库中:git add Gemfile.lock
  5. 从服务器中删除文件夹(不知道这是否真的需要,反正做了)
  6. 部署
于 2013-06-19T10:35:23.983 回答
0

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

于 2013-02-10T08:52:33.993 回答
-1

我遇到了完全相同的问题。

我的发布文件夹中没有任何内容(完全没有 - 我的部署冷一直回滚)。

我的 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"

现在一切都很好。接下来真的应该看看修复文件夹结构!

于 2013-02-22T00:54:52.427 回答