当我运行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终端成功?
答案 0 :(得分:22)
我仍然不确定问题出在哪里但是删除了该行:
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
答案 1 :(得分:0)
忽略绿色线下方的部分,但我会保留它们,仅供其他人参考。
当我使用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
答案 2 :(得分:0)
在我的情况下,将此行添加到deploy.rb文件
中set :scm, :git