Capistrano不会创建版本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Capistrano不会创建版本相关的知识,希望对你有一定的参考价值。

当我运行cap deploy时,Capistrano将尝试创建一个文件夹,如$HOME/sites/MY_APP/releases/TIMESTAMP。我可以看到该命令试图运行,但它实际上不会创建该文件夹。

我可以直接从Capistrano输出中复制命令并通过SSH运行命令,它可以正常工作,没有任何问题。

该命令看起来如此:

cp -RPp /home/some_user/sites/my_cool_app/shared/cached-copy /home/some_user/sites/my_cool_app/releases/20111123164239 && (echo 59bf115868c2430cd0475ca1596998f1cfa3c084 > /home/some_user/sites/my_cool_app/releases/20111123164239/REVISION)

为什么命令会通过Capistrano失败,但通过SSH终端成功?

答案

我仍然不确定问题的范围,但删除线:

set :deploy_via, :remote_cache

解决了我的问题。它看起来像是一个没有创建版本目录的bug,因此删除该行会跳过该步骤。如果你想保留remote_cache,一个更好的方法可能是添加另一个设置步骤,如下所示:

after "deploy:setup", "deploy:create_release_dir"
namespace :deploy do
  task :create_release_dir, :except => {:no_release => true} do
    run "mkdir -p #{fetch :releases_path}"
  end
end
另一答案

忽略绿色折线下面的部分,但我会保留它们,仅供其他人参考。

当我使用Capistrano 3.9.x版本时,提到的问题正在发生。当我降级到版本3.4.0时,一切正常。


答案的第二部分:

一旦发生这种情况,那就是在~/.ssh/没有设置github密钥。

您应该在服务器上生成一个ssh密钥。一旦.pub文件在~/.ssh中生成,那么你应该去github.com(或任何其他服务)并在网站上添加新生成的ssh密钥(它应该在设置页面或类似的地方找到)。此外,在服务器上添加~/.ssh/config文件中的正确记录,该记录与capistrano部署脚本中的标识匹配:

set :repo_url, proc { "git@github.com:your_git_name/#{fetch(:application)}.git" }

所以config文件应该如下所示:

Host github.com
  HostName github.com
    User git
      IdentityFile ~/.ssh/id_rsa_my_new_key_on_the_server
另一答案

在我的例子中,这是将此行添加到deploy.rb文件中的问题

set :scm, :git

以上是关于Capistrano不会创建版本的主要内容,如果未能解决你的问题,请参考以下文章

ruby Capistrano部署策略支持git子模块(需要Capistrano v3.1.0或更高版本)

片段创建的 Intent 不会触发 onNewIntent

Capistrano在升级ruby版本和puma时重启错误版本的puma

如何配置 capistrano 以使用我的 rvm 版本的 Ruby

使用capistrano部署特定版本

如何使用 capistrano 回滚到之前部署的版本?