2009-07-24 5 views
3

J'ai un problème avec le déploiement de mon application sur mon serveur.problème de capistrano

J'ai msysgit, github et capistrano installés et fonctionnels.

J'ai réussi à pousser mon application vers github et je peux exécuter avec succès cap deploy:setup pour installer sur mon serveur depuis ma machine locale.

MAIS ..

Quand je lance cap deploy:cold il me demande mon mot de passe pour se connecter à repo github alors il demande à nouveau de se connecter à mon serveur, mais il me donne une autorisation d'erreur refusée (clé publique) et les imbéciles.

Il semble que ce soit une erreur avec mes clés, mais comment puis-je se connecter à mon serveur pour faire le cap deplo:setup?

Mes clés publiques sont les mêmes dans github et mon serveur est-ce correct?

Également lors de l'exécution cap deploy:setup il me demande mon serveur d'utilisateur mot de passe est-ce correct?

S'il vous plaît aider car cela m'a retardé pendant plusieurs jours déjà

C'est l'erreur:

$ cap deploy * executing deploy' * executing deploy:update' ** 
transaction: start * executing `deploy:update_code' executing locally: 
"git ls-remote [email protected]:rmossuk/Macrotec.git master " 
Enter passphrase for key '/c/Users/Rick/.ssh/id_rsa': * 
executing "git clone -q [email protected]:rmossuk/Macrotec.git /usr/local/lib/r uby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Macrotec/releases/20090723213346 && cd /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/ra ils_apps/Macrotec/releases/20090723213346 && git checkout -q -b deploy a28798bc0 d3b5688453a58bf4917d6c931187a7a && (echo a28798bc0d3b5688453a58bf4917d6c931187a7 a > /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Mac rotec/releases/20090723213346/REVISION)" servers: ["macclesfieldnutrition.co.uk"] 
Enter passphrase for c:/Users/Rick/.ssh/id_rsa: 
[macclesfieldnutrition.co.uk] executing command ** 
[macclesfieldnutrition.co.uk :: out] Permission denied (publickey). ** 
[macclesfieldnutrition.co.uk :: out] fatal: The remote end hung up 
unexpecte dly command finished *** [deploy:update_code] rolling back * 
executing "rm -rf /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/s tub/rails_apps/Macrotec/releases/20090723213346; true" 
servers: 
["macclesfieldnutrition.co.uk"] [macclesfieldnutrition.co.uk] 
executing command command finished failed: "sh -c 'git clone -q [email protected]:rmossuk/Macrotec.git /usr/local/lib/ ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Macrotec/releases/20090723213346 && cd /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/r ails_apps/Macrotec/releases/20090723213346 && git checkout -q -b deploy a28798bc 0d3b5688453a58bf4917d6c931187a7a && (echo a28798bc0d3b5688453a58bf4917d6c931187a 7a > /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Ma crotec/releases/20090723213346/REVISION)'" on macclesfieldnutrition.co.uk 

Merci beaucoup rick

Répondre

1

Vous devriez avoir sur votre serveur (où vous voulez déployer) installés Vos clés d'accès pour le serveur git.

Vous devriez avoir le vôtre fichiers clés (avec chmod 600):

 
id_rsa 

id_rsa.pub 

dans le répertoire ~/.ssh (avec chmod 700) sur le serveur à la maison de l'utilisateur deploy

vous avez probablement ces clés uniquement sur votre ordinateur de développement local.

Vous pouvez ajouter pour votre fichier de déploiement un hook pour 'setup: cold' où sera automatiquement téléchargé vos fichiers de clés locales.

+0

quoi de si vous avez une clé publique et privée sur ma machine locale et mon serveur? devraient-ils être exactement les mêmes? Je pensais que vous avez juste privé public sur la machine locale, puis copiez le pulic sur le serveur? La chose est aswll est que je peux SSH utilisateur @ serveur et entrez ma phrase de passe et il se connectera au serveur de cette façon. ??? –

+0

vous voulez déployer en utilisant git, et capistrano veut tirer le code du côté serveur, pas de votre ordinateur et c'est la raison pour laquelle vous devriez avoir des clés d'accès git sur le compte du serveur. Vous devez diviser l'accès ssh au serveur depuis votre ordinateur et accéder au serveur git depuis le serveur (pour obtenir les dernières sources). Vous ne téléchargez pas de sources à partir d'un ordinateur local, vous demandez un déploiement via git côté serveur. –

+0

En théorie, capistrano prend en charge l'agent ssh pour que les clés locales puissent être utilisées et que vous n'avez pas besoin de vos propres clés sur le serveur de déploiement. En fait, c'est le scénario idéal. Cependant, Capistrano semble être un peu cassé sur cette fonctionnalité –

4

Si j'ajoute à mon fichier deploy.rb

set :ssh_options, {:forward_agent => true} 
on :start do  
    `ssh-add` 
end 

Je reçois cette autre erreur

$ cap deploy 
    triggering start callbacks for `deploy' 
Could not open a connection to your authentication agent. 
    * executing `deploy' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    executing locally: "git ls-remote [email protected]:rmossuk/Macrotec.git master 
" 
Enter passphrase for key '/c/Users/Rick/.ssh/id_rsa': 
    * executing "git clone -q [email protected]:rmossuk/Macrotec.git /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Macrotec/releases/20090724112629 && cd /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Macrotec/releases/20090724112629 && git checkout -q -b deploy a28798bc0d3b5688453a58bf4917d6c931187a7a && (echo a28798bc0d3b5688453a58bf4917d6c931187a7a > /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Macrotec/releases/20090724112629/REVISION)" 
    servers: ["macclesfieldnutrition.co.uk"] 
Enter passphrase for c:/Users/Rick/.ssh/id_rsa: 
    [macclesfieldnutrition.co.uk] executing command 
*** [deploy:update_code] rolling back 
    * executing "rm -rf /usr/local/lib/ruby/gems/1.9.1/gems/passenger-2.2.4/test/stub/rails_apps/Macrotec/releases/20090724112629; true" 
    servers: ["macclesfieldnutrition.co.uk"] 
** [deploy:update_code] exception while rolling back: TypeError, can't convert 
Net::SSH::Authentication::Pageant::Socket into IO 
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/processable.rb:25:in `select': can't convert Net::SSH::Authentication::Pageant::Socket into IO (TypeError) 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/processable.rb:25:in `process_iteration' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/command.rb:163:in `process!' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/command.rb:162:in `loop' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/command.rb:162:in `process!' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/command.rb:133:in `process' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/configuration/actions/invocation.rb:173:in `run_tree' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/configuration/connections.rb:172:in `execute_on_servers' 
     from c:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `each_slice' 
     ... 40 levels... 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/lib/capistrano/cli/execute.rb:14:in `execute' 
     from c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/capistrano-2.5.8/bin/cap:4 
     from c:/InstantRails/ruby/bin/cap:19:in `load' 
     from c:/InstantRails/ruby/bin/cap:19 
+0

travaillé pour moi en ajoutant ce bloc – Elmor

-1

Il est pas nécessaire d'avoir les clés ssh pour accéder au serveur de référentiel sur le mahcine deploy . Vous pouvez activer le SSH forward_agent, pour que le ssh_agent vous suive de machine à mache. Pour ce faire avec Capistrano, vous pouvez ajouter cette ligne au fichier deploy.rb

ssh_options[:forward_agent] = true

1

Cette question est vraiment vieux, mais je rencontré à nouveau le même problème sur une fenêtre de la machine 7.Vous devez ajouter forward_agent et l'emplacement de votre clé SSH à votre Déployez fichier de configuration: Voici ma solution à config/deploy.rb:

set :ssh_options, :forward_agent => true 
set :ssh_options, :keys => %w(c:/Users/USERNAME/.ssh/id_rsa) 

En outre, la meilleure solution serait de développer des applications de rails (et utiliser Capistrano) dans un environnement Linux. Cela permettrait d'éviter des tonnes de tels trucs, et cela économiserait beaucoup de temps :)

Questions connexes