2012-02-23 15 views
5

Recibo errores de permisos al intentar implementar mi aplicación de rieles en el servidor de un amigo. Estoy ejecutando rails 3.1.3, ruby-1.9.2-p290, capistrano 2.11.2, Mac OS 10.6.8, y tenemos las claves ssh configuradas. Sin embargo, no podemos determinar de dónde provienen los problemas de permisos. Creemos que es posible que Capistrano intente insertar el código del repositorio de git COMO EL USUARIO de GIT en el directorio de implementación, o algo así. Pero este es nuestro primer intento de implementación, por lo que no estamos seguros. ¡Cualquier ayuda sería muy apreciada!ssh problemas durante la implementación con capistrano

Ah, y aquí hay algunos detalles más que mi amigo me dijo que especificara: appsrv-04.example.ca es el FQDN canónico del host, y project.example.ca es un CNAME que apunta al registro A de appsrv-04.example.ca. El archivo known_hosts para los usuarios de git y deploy contiene todas las aplicacionesrv-04, appsrv-04.example.ca, project y project.example.ca.

A continuación se muestra el resultado de la implementación del límite de ejecución: actualización.

[[email protected]]~/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://[email protected]/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://[email protected]/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 '[email protected]' -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://[email protected]/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 

Y aquí está mi archivo de despliegue:

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

set :application, "Project" 

set :scm, "git" 
set :repository, "ssh://[email protected]/usr/local/git_root/project.git" 
set :user, "deploy" 

#set :rvm_bin_path, "/usr/local/rvm/bin" 
set :rvm_ruby_string, "[email protected]" 

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 

Respuesta

0

Problema resuelto. El host virtual se creó clonando uno existente y cambiando el IP. Actualicé el archivo/etc/hosts para usar el nuevo nombre de host, pero aparentemente no el nuevo IP. Entonces, cuando el usuario de implementación intentaba ssh como el usuario de git ... estaba fallando porque no había un usuario de git en la IP que estaba usando.

14

Usted ha diagnosticado casi seguro que este problema correctamente; Está intentando consultar el repositorio de github como usuario de implementación y la clave reenviada no se está configurando correctamente. Parece que ha activado forward_agent en Capistrano ... ¿está agregando la clave a su agente para que se reenvíe correctamente?

Intente hacer eso con ssh-add ~/.ssh/id-rsa y despliegue de nuevo.

+0

Establecí forward_agent en falso y lo intenté, y obtuve el mismo resultado. En realidad, no estamos usando un agente ssh. Podemos, si eso hiciera la vida más fácil. Mi pregunta, ¿qué usuario necesita qué teclas se agregaron a qué agente? –

+1

No desea establecer forward_agent en falso. El problema es probablemente que su repositorio github es privado, por lo que solo se puede acceder mediante ciertas claves SSH; el servidor no tiene una clave SSH permitida por lo que no puede verificar su repositorio. El uso de forward_agent le permite a su agente SSH reenviar su clave privada al servidor, que usará su clave SSH para verificar el repositorio de github. Establezca forward_agent en true y agregue su clave SSH al agente, y el servidor remoto podrá descargar el repositorio correctamente. – Veraticus

+0

Gracias por sus respuestas. Intenté jugar con ssh-agent, pero hasta ahora sin éxito. ¿Podemos probar la rutina de "explicar como si yo fuera cinco"? El repositorio de git y la implementación están sucediendo en el mismo servidor, aunque en deploy.rb están usando diferentes nombres de host. El repositorio de git se alcanza a través del registro canónico A, mientras que el despliegue se realiza a través de un registro CNAME que apunta al registro A. Esta fue una decisión arbitraria, y podría cambiarse fácilmente. –

Cuestiones relacionadas