2011-11-23 4 views
11

Lorsque je cours cap deploy, Capistrano va tenter de créer un dossier tel que $HOME/sites/MY_APP/releases/TIMESTAMP. Je peux voir la commande essayant de courir, mais elle ne créera pas réellement le dossier.Capistrano ne créera pas les versions

Je peux copier la commande directement à partir de la sortie Capistrano et exécuter la commande sur SSH et cela fonctionne très bien sans problème.

La commande ressemble à quelque chose donc:

cp -RPp /home/some_user/sites/my_cool_app/shared/cached-copy /home/some_user/sites/my_cool_app/releases/20111123164239 && (echo 59bf115868c2430cd0475ca1596998f1cfa3c084 > /home/some_user/sites/my_cool_app/releases/20111123164239/REVISION) 

Pourquoi la commande échouerait par Capistrano, mais réussir grâce à un terminal SSH?

+0

Capistrano annule si quelque chose d'autre échoue. Pouvez-vous poster la sortie capistrano, et pendant que vous y êtes, la sortie du cap déploie: check? – HectorMalot

+0

Cap retourne 'Vous semblez avoir toutes les dépendances nécessaires installées 'à partir du cap' deploy: check' – RyanScottLewis

+0

Un certain nombre de choses peuvent être désactivées: Le dossier est-il accessible en écriture à l'utilisateur que vous utilisez pour vous connecter au serveur? Quelque chose d'autre échoue-t-il dans le script de déploiement? – HectorMalot

Répondre

22

Je ne suis toujours pas sûr où le problème s'étend de la ligne, mais la suppression:

set :deploy_via, :remote_cache 

choses pour moi résolus. Cela ressemble à un bogue où le répertoire des versions n'est pas créé et la suppression de cette ligne ignore cette étape. Une meilleure approche si vous voulez garder le remote_cache est probablement ajouter une autre étape pour la configuration comme ceci:

after "deploy:setup", "deploy:create_release_dir" 
namespace :deploy do 
    task :create_release_dir, :except => {:no_release => true} do 
    run "mkdir -p #{fetch :releases_path}" 
    end 
end 
+0

'set: deploy_via,:' remote_cache 'n'a pas aidé .. je viens de créer un répertoire' run 'mkdir -p # {fetch: releases_path} "' comme ça. – poorva

0

Ignore partie en dessous du lineline vert, mais je vais les garder, juste pour la référence pour les autres.

Le problème mentionné se passait pour moi lorsque j'utilisais la version Capistrano 3.9.x. Lorsque j'ai rétrogradé à la version 3.4.0, tout fonctionnait.


Deuxième partie de la réponse:

Une fois que cela est arrivé à moi était lorsque les touches GitHub ne sont pas mis en place dans ~/.ssh/.

Vous devez générer une clé ssh sur le serveur. Une fois que le fichier .pub est généré en ~/.ssh, vous devez aller sur github.com (ou tout autre service) et ajouter la nouvelle clé ssh générée sur le site web (elle doit être trouvée sous la page des paramètres ou similaire). En outre, sur le serveur ajouter un enregistrement correct dans le fichier ~/.ssh/config qui correspond à l'identification dans le script deploy Capistrano:

set :repo_url, proc { "[email protected]:your_git_name/#{fetch(:application)}.git" } 

Ainsi, le fichier config devrait ressembler à ceci:

Host github.com 
    HostName github.com 
    User git 
     IdentityFile ~/.ssh/id_rsa_my_new_key_on_the_server 
0

Dans mon cas, il était une question d'ajouter cette ligne dans le fichier deploy.rb

set :scm, :git 
Questions connexes