Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Capistrano不会创建发布_Ruby On Rails_Ruby_Ruby On Rails 3_Capistrano - Fatal编程技术网

Ruby on rails Capistrano不会创建发布

Ruby on rails Capistrano不会创建发布,ruby-on-rails,ruby,ruby-on-rails-3,capistrano,Ruby On Rails,Ruby,Ruby On Rails 3,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/m

当我运行
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,没有创建releases目录,因此删除该行会跳过该步骤。如果要保留远程缓存,更好的方法可能是在设置中添加另一个步骤,如下所示:

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
version时,我遇到了上述问题。当我降级到版本
3.4.0
时,一切正常


答案的第二部分:

我曾经遇到过这样的情况:github密钥没有在
~/.ssh/
中设置

您应该在服务器上生成ssh密钥。在
~/.ssh
中生成
.pub
文件后,您应该转到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将回滚。您可以发布capistrano输出吗?当您在上面时,cap deploy:check的输出会返回
您似乎已经从cap安装了所有必要的依赖项
deploy:check
很多事情可能会关闭:您用于登录服务器的用户是否可以写入文件夹?部署脚本中还有其他失败的地方吗?我还没有弄清楚这一点,但问题似乎来自于
$HOME/sites/MY_APP/releases
目录不存在的事实。如果您使用ssh连接并手动创建releases目录,则可以暂时解决问题。仍在试图弄清楚为什么cap没有像以前那样执行此操作。Steve:releases目录应该由
deploy:setup
创建,而您的“set:deploy\u via,:remote\u cache”没有帮助。。我刚刚创建了一个dir'run“mkdir-p{fetch:releases_path}”,如下所示。