2008-11-11 7 views
6

Mon hôte partagé ne fournissait pas git, donc je l'ai construit et installé dans ~/bin. Lorsque je l'ai exécuté, j'ai rencontré l'erreur suivante sur la plupart des commandes, bien qu'elles aient réussi.Utilisation de capistrano lorsque git distant est sur un chemin non standard

stdin: is not a tty

je peux résoudre ce problème en ajoutant:

default_run_options[:pty] = true

à mon deploy.rb, mais j'obtenir cette erreur, ce qui bloque le déploiement :

sh: git: command not found

Comment puis-je résoudre les erreurs?

J'ai essayé d'ajouter un fichier ~/.ssh/environment avec "PATH=$PATH:$HOME/bin" (et de changer sshd_config pour l'utiliser) mais il n'a rien fait.

Il semble que quel que soit le shell utilisé par capistrano n'utilise pas le ~/.bashrc ou ~/.bash_profile sur le serveur distant.

Des idées pour définir le chemin sur la machine distante?

autre info: J'utilise OS X localement, et le serveur partagé est linux sur Site5.

+0

Veuillez indiquer quelle réponse a résolu ce problème. – cfx

Répondre

2

Une solution rapide est de définir les paramètres suivants dans votre fichier deploy.rb:

set :deploy_via, :copy 

Cela entraînera la caisse de se produire sur votre propre machine et ensuite être copiés sur le serveur de déploiement.

3

Vous devriez être en mesure de spécifier le chemin complet git comme ceci:

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

Je n'ai pas essayé pour moi-même - il trouvé dans la documentation du code source pour git.rb à Capistrano même.

+0

qui fonctionne tant que les commandes git locale et distante sont dans le même chemin –

14

Merci, Chu - vous m'avez mis sur la bonne voie. Juste en utilisant: set :scm_command, "~/bin/git"
encore m'a donné des erreurs, puisque mon git local n'est pas à cet endroit.

Cependant, ce qui suit semble fonctionner, et pour résoudre mes problèmes:
set :scm_command, "~/bin/git"
set :local_scm_command, "/usr/local/bin/git"

1

C'est une grande aide, comme je courais dans le même numéro que l'affiche originale.

"Avant" symptômes:

  • deploy cap d'exécution: la configuration (avec succès)
  • couru deploy bouchon: vérifier (échoue, avec 'commande git not found')

I maintenant ajouté set: scm_command, "~/bin/git" à mon fichier deploy.rb.

  • couru déploiement de couvercle: la configuration (réussie)
  • couru capuchon déploiement: vérification (réussie)
  • couru déploiement de capuchon froid (échoue, avec l'erreur suivante)

    : 97: dans `` ': Aucun fichier ou répertoire - ~/bin/git information [email protected]: Quintar/eu reka.git -rHEAD (Errno :: ENOENT)

il ressemble git ' je s reconnu, mais le référentiel que j'ai inclus dans mon deploy.rb est contourné?

8

Le problème est que vous avez défini

default_run_options[:pty] = true 

ce qui signifie que votre .bash_profile ou votre fichier init shell habituelle ne seront pas exécutées, ce qui est le cas lorsque vous définissez sur false - mais alors vous aurez des problèmes quand il veut vous demander le mot de passe.

Pour contourner ce problème, vous pouvez définir manuellement votre variable d'environnement PATH dans votre fichier deploy:

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

Votre suggestion default_environment vient de me faire passer un énorme casse-tête pour le Rails Rumble 2010. Merci! – Jared

3
stdin: is not a tty 

Ceci est probablement en raison de CPanel installé sur votre hôte partagé. Il exécute "mesg y" dans le fichier global /etc/.bashrc qui est inclus dans votre fichier ~/.bashrc. Donc, vous pouvez simplement commenter l'inclusion.

est ici la source: http://webhostingneeds.com/Git_stdin_is_not_a_tty

0

Le fichier d'environnement ~/.ssh/n'est pas exécuté par un obus. C'est un fichier d'environnement codé en dur. Si vous voulez définir le chemin de cette façon, vous devrez le coder en dur au lieu de l'ajouter à $ PATH. Les autres réponses sont peut-être plus correctes, mais définir correctement ~/.ssh/environment est une solution de repli fiable si tout le reste échoue.

Questions connexes