2010-02-19 21 views
18

Estoy intentando hacer 'deploy: cold' para mi aplicación. El repositorio git es local para mi servidor de implementación (es decir, solo tengo un servidor para todo y yo no alojo mi código en github).Capistrano + Git: repositorio local al servidor de producción

Esta es la transcripción (reemplazado mi nombre de la aplicación con "miaplicacion" para la privacidad)

* executing `deploy:cold' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    executing locally: "git ls-remote /home/mrichman/git/myapp.git master" 
fatal: '/home/mrichman/git/myapp.git' does not appear to be a git repository 
fatal: The remote end hung up unexpectedly 
*** [deploy:update_code] rolling back 
    * executing "rm -rf /var/www/myapp.com/releases/20100218203108; true" 
    servers: ["myapp.com"] 
Password: 
    [myapp.com] executing command 
    command finished 
Command git ls-remote /home/mrichman/git/myapp.git master returned status code 32768 

Aquí es mi deploy.rb: http://pastie.org/831424

También he intentado

set :repository, "[email protected]:/home/mrichman/git/myapp.git" 

pero eso me da

ssh: connect to host localhost port 22: Connection refused 

Cualquier idea es apreciada.

Respuesta

16

Acabo de pasar por el mismo problema. La clave es no usar deploy_via copy, sino establecer: local_repository

Esto debe establecerse en la URL que utiliza para acceder al repositorio desde su computadora/laptop de desarrollo.

Así que el mío tiene

set :repository, "file:///srv/git/myapp.git" 
set :local_repository, "nameOfHostFromSSHConfig:/srv/git/myapp.git" 

parece haber funcionado. Solo recuerde quitar también la línea de copia deploy_via.

+0

ahora tengo el siguiente, que también falla: conjunto: repositorio, "file: ///var/git/myapp.git" conjunto: local_repository, "localhost: /var/git/myapp.git" ejecutando localmente: "git ls-remote localhost: /var/git/hireexchange.git master" ssh: connect to host localhost puerto 22: Connection refused –

+1

¿Está desarrollando en la misma caja? Si lo es, me imagino: local_repository, "file: //var/git/myapp.git" funcionaría. localhost debe reemplazarse con cualquier nombre de host al que se conecte desde su estación de trabajo remota asumida. También he encontrado que si tiene submódulos se encontrará con más problemas haciendo una implementación como esta, porque los módulos están configurados para apuntar a una URL remota. Muy molesto, pero puede resolverse usando .ssh/config en su servidor bajo el usuario que implementa. – pmarsh

+1

Hola chicos. Si hace alguna diferencia, git en mi máquina local y remota requiere diferentes rutas, por lo tanto, necesito set: git_local/path/to/remote/git y set: git/usr/bin/git (tenga en cuenta que estos no requieren el ssh en el principio). – btelles

1

la sesión como el usuario del sitio va a desplegar en y probar este para ver si su usuario tiene permiso para acceder a ese directorio:

ls -la /home/mrichman/git/myapp.git

Si obtiene un error de Permiso denegado, deberá asegurarse de establecer los permisos en los directorios adjuntos del repositorio que permiten que la secuencia de comandos de implementación acceda a los archivos.

+0

He comprobado que mi usuario tiene acceso de lectura despliegue completo a /home/mrichman/git/myapp.git. Gracias por el comentario. –

+0

Intente iniciar sesión en la cuenta de usuario de implementación y escriba manualmente el comando fallido: "git ls-remote /home/mrichman/git/myapp.git master", probablemente le dé el mismo error, y si lo hace, inicie sesión como el usuario mrichman y pruébalo como ese usuario. Si eso todavía da un error, que apuesto a que sucederá, entonces querrá entrar en "/ home/mrichman/git/myapp.git "directorio y tipo" estado de git "y si eso falla, deberá verificar que el contenido de ese directorio contenga un repositorio de git. – rwl4

+0

Cuando hago' git ls-remote' como mi usuario de implementación o como mi propio usuario parece tener éxito: 'aa30ffc814fffd96b168ffec7224aeb9fe9df161 \t refs/heads/master'. Creo que' git status' solo funciona en árboles de trabajo, y no en el repositorio real Como experimento, empujé mi repo a Codaset, y mi 'cap deploy' funciona bien de esa manera. Puedo (y probablemente debería) continuar de esa manera, ya que no es seguro mantener mi SCM en su servidor web :) –

0

¡Asegúrese de haber escrito el git repo correcto con cuidado sensible a mayúsculas y minúsculas escribiendo! (Enfrenté el mismo problema, simplemente lo resolví)

0

Mi problema estaba relacionado con un problema de hosts conocidos. Todo lo que tenía que hacer era asegurarme de que el servidor de git remoto estuviera en mis servidores conocidos (al intentar ingresar a SSH por primera vez, le pediré que lo agregue), y funcionó a las mil maravillas.

0

Si se establece local_repository, Capistrano utiliza el valor de respository del servidor de implementación y el valor local_respository del servidor de desarrollo. Or something like that.

Mi configuración funcionó así:

set :repository, "/home/#{user}/path/to/repo.git" 
set :local_repository, "myserver.com:path/to/repo.git" 
Cuestiones relacionadas