software rails deploy compile capristano ruby-on-rails shell path capistrano deployment

ruby on rails - rails - Usar capistrano cuando git remoto está en una ruta no estándar



capristano (7)

Mi host compartido no proporcionaba git, así que lo construí e instalé en ~ / bin. Cuando lo ejecuté, obtuve el siguiente error en la mayoría de los comandos, aunque tuvieron éxito.

stdin: is not a tty

Puedo resolver ese problema agregando:

default_run_options[:pty] = true

a mi deploy.rb, pero luego aparece este error que bloquea la implementación:

sh: git: command not found

¿Cómo puedo resolver ambos errores?

Intenté agregar un archivo ~ / .ssh / environment con "PATH=$PATH:$HOME/bin" (y cambiando sshd_config para usarlo) pero no hizo nada.

Parece que cualquier shell que Capistrano esté usando no está utilizando ~ / .bashrc o ~ / .bash_profile en el servidor remoto.

¿Alguna idea de cómo establecer la ruta en la máquina remota?

otra información: estoy usando OS X localmente, y el servidor compartido es linux en Site5.


Debería poder especificar la ruta completa a git así:

set :scm_command, "/home/your_cap_runner_user/bin/git"

No lo he intentado por mí mismo, lo encontré en la documentación del código fuente de git.rb en Capistrano.


Gracias, Chu, me pusiste en el camino correcto.

simplemente usando: set :scm_command, "~/bin/git"
todavía me dio errores, ya que mi git local no está en ese lugar.

Sin embargo, lo siguiente parece funcionar, y para resolver mis problemas:
set :scm_command, "~/bin/git"
set :local_scm_command, "/usr/local/bin/git"


Una solución rápida es establecer lo siguiente en su archivo deploy.rb:

set :deploy_via, :copy

Esto hará que el pago se produzca en su propia máquina y luego se copiará en el servidor de implementación.


Esto es de gran ayuda, ya que me encontré con el mismo problema que el póster original.

Síntomas "antes":

  • run cap deploy: setup (exitoso)
  • Despliegue de la tapa de ejecución: comprobación (falla, con ''comando de git no encontrado'')

Ahora agregué set: scm_command, "~ / bin / git" a mi archivo deploy.rb.

  • Despliegue de la tapa del rancho: configuración (exitosa)
  • Despliegue de la tapa del rancho: comprobación (correcta)
  • despliegue de capitalización: frío (falla, con el siguiente error)

    : 97: en `` '': Ningún archivo o directorio - ~ / bin / git info [email protected]: quintar / eu reka.git -rHEAD (Errno :: ENOENT)

Entonces parece que ''git'' es reconocido, pero el repositorio que incluí en mi deploy.rb está pasado por alto?


El problema es que has establecido

default_run_options[:pty] = true

lo que significa que su archivo .bash_profile o su archivo de inicialización shell no se ejecutará, que no es el caso cuando lo establece en falso, pero entonces tendrá problemas cuando quiera pedirle la contraseña.

Para evitar este problema, puede establecer manualmente la variable de entorno PATH en su archivo de despliegue:

default_environment[''PATH''] = "/your/path/to/git:/and/any/other/path/you/need"


stdin: is not a tty

Esto es probablemente debido a CPanel instalado en su host compartido. Ejecuta "mesg y" en el archivo global /etc/.bashrc que se incluye en su ~ / .bashrc. Entonces puedes comentar la inclusión.

Aquí está la fuente: http://webhostingneeds.com/Git_stdin_is_not_a_tty


El archivo ~ / .ssh / environment no es ejecutado por un shell. Es un archivo de entorno codificado. Si desea establecer la ruta de esta manera, necesitará codificarla en lugar de agregarla a $ PATH. Las otras respuestas son posiblemente más correctas, pero establecer ~ / .ssh / environment correctamente es una alternativa confiable si todo lo demás falla.