Ruby on rails 使用capistrano部署期间的ssh问题

Ruby on rails 使用capistrano部署期间的ssh问题,ruby-on-rails,deployment,capistrano,Ruby On Rails,Deployment,Capistrano,我在尝试将rails应用部署到朋友的服务器时遇到权限错误。我正在运行rails 3.1.3、ruby-1.9.2-p290、capistrano 2.11.2、Mac OS 10.6.8,我们已经设置了ssh密钥。但是,我们无法找出权限问题的来源。我们认为可能是capistrano试图将代码作为git用户从git repo推送到deploy目录,或者类似的东西。但这是我们第一次尝试部署,所以我们不确定。任何帮助都将不胜感激 哦,下面是我朋友告诉我要详细说明的一些细节: appsrv-04.exa

我在尝试将rails应用部署到朋友的服务器时遇到权限错误。我正在运行rails 3.1.3、ruby-1.9.2-p290、capistrano 2.11.2、Mac OS 10.6.8,我们已经设置了ssh密钥。但是,我们无法找出权限问题的来源。我们认为可能是capistrano试图将代码作为git用户从git repo推送到deploy目录,或者类似的东西。但这是我们第一次尝试部署,所以我们不确定。任何帮助都将不胜感激

哦,下面是我朋友告诉我要详细说明的一些细节: appsrv-04.example.ca是主机的规范FQDN,project.example.ca是指向appsrv-04.example.ca的a记录的CNAME。git和deploy用户的已知_hosts文件包含所有appsrv-04、appsrv-04.example.ca、project和project.example.ca

下面是运行cap deploy:update的输出

[user@workstation]~/Code/projectapi $ cap deploy:update
 * executing `deploy:update'
  ** transaction: start
  * executing `deploy:update_code'
updating the cached checkout on all servers
executing locally: "git ls-remote ssh://git@appsrv-04.example.ca/usr/local/git_root/projectapi.git master"
Enter passphrase for key '/Users/user/.ssh/id_rsa': 
 command finished in 4478ms
* executing "if [ -d /usr/local/www/sites/project.example.ca/public/shared/cached-copy ]; then cd /usr/local/www/sites/project.example.ca/public/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard e71d220f299271522517f7b4f028a9275d53326a && git clean -q -d -x -f; else git clone -q ssh://git@appsrv-04.example.ca/usr/local/git_root/projectapi.git /usr/local/www/sites/project.example.ca/public/shared/cached-copy && cd /usr/local/www/sites/project.example.ca/public/shared/cached-copy && git checkout -q -b deploy e71d220f299271522517f7b4f028a9275d53326a; fi"
servers: ["project.example.ca"]
Enter passphrase for /Users/user/.ssh/id_dsa: 
[project.example.ca] executing command
 ** [project.example.ca :: err] Permission denied, please try again.
 ** [project.example.ca :: err] Permission denied, please try again.
 ** [project.example.ca :: err] Permission denied (publickey,password).
 ** [project.example.ca :: err] fatal: The remote end hung up unexpectedly
  command finished in 650ms
*** [deploy:update_code] rolling back
 * executing "rm -rf /usr/local/www/sites/project.example.ca/public/releases/20120222225453; true"
servers: ["project.example.ca"]
[project.example.ca] executing command
command finished in 465ms
failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell '1.9.2-p290@project' -c 'if [ -d /usr/local/www/sites/project.example.ca/public/shared/cached-copy ]; then cd /usr/local/www/sites/project.example.ca/public/shared/cached-copy && git fetch -q origin && git fetch --tags -q origin && git reset -q --hard e71d220f299271522517f7b4f028a9275d53326a && git clean -q -d -x -f; else git clone -q ssh://git@appsrv-04.example.ca/usr/local/git_root/projectapi.git /usr/local/www/sites/project.example.ca/public/shared/cached-copy && cd /usr/local/www/sites/project.example.ca/public/shared/cached-copy && git checkout -q -b deploy e71d220f299271522517f7b4f028a9275d53326a; fi'" on project.example.ca
这是我的部署文件:

$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) 
require "rvm/capistrano"          

set :application, "Project"

set :scm, "git"
set :repository,  "ssh://git@appsrv-04.example.ca/usr/local/git_root/project.git"
set :user, "deploy"

#set :rvm_bin_path, "/usr/local/rvm/bin"
set :rvm_ruby_string, "1.9.2-p290@project"

ssh_options[:forward_agent] = true

set :branch, "master"

set :deploy_via, :remote_cache

set :deploy_to, "/usr/local/www/sites/project.example.ca/public/"

set :use_sudo, false

set :domain, 'project.example.ca'

role :app, domain
role :web, domain
role :db,  domain, :primary => true

你几乎肯定正确地诊断了这个问题;您试图以部署用户身份签出github存储库,但转发的密钥设置不正确。看起来你已经在Capistrano打开了forward_代理。。。您是否正在将密钥添加到代理以便正确转发


尝试使用
ssh add~/.ssh/id rsa执行此操作,然后再次部署。

问题已解决。虚拟主机是通过克隆现有主机并更改IP创建的。我更新了/etc/hosts文件以使用新的主机名,但显然不是新的IP。因此,当部署用户尝试以git用户身份使用ssh时。。。它失败了,因为它使用的IP上没有git用户

我将_代理设置为false并尝试,得到了相同的结果。我们实际上没有使用ssh代理。我们可以,如果这能让生活更轻松的话。我的问题是,哪个用户需要将哪些密钥添加到哪个代理?您不想将forward\u agent设置为false。问题可能是您的github存储库是私有的,因此只能通过某些SSH密钥进行访问;服务器没有允许的SSH密钥,因此无法签出您的存储库。使用forward_代理允许您的SSH代理将您的私钥转发到服务器,服务器将使用您的SSH密钥从github签出存储库。将forward_agent设置为true并将SSH密钥添加到该代理,远程服务器将能够正确下载存储库。感谢您的回复。我尝试过使用ssh代理,但迄今为止没有成功。我们能试试“像我五岁一样解释”吗?git存储库和部署发生在同一台服务器上,尽管在deploy.rb中它们使用不同的主机名。git repo是通过规范的A记录实现的,而部署是通过指向A记录的CNAME记录实现的。这是一个任意的决定,可以很容易地更改。git repo是使用用户“git”访问的,而部署是通过用户“deploy”完成的。我的个人用户帐户的密钥位于两个用户的授权密钥2文件中,因此我可以从工作站通过ssh登录到他们。如果我理解正确,在执行cap部署时,系统将作为部署用户登录,并尝试直接访问git存储库?那么,我们之间的联系deploy@project正在打开到的ssh连接git@appsrv-04,在本例中,它恰好是同一台服务器,但不必是。