2010-08-28 18 views
0

J'ai une tâche très simple appelé update_feeds:Comment exécuter une commande sur le serveur avec Capistrano?

desc "Update feeds" 
task :update_feeds do 
    run "cd #{release_path}" 
    run "script/console production" 
    run "FeedEntry.update_all" 
end 

Chaque fois que je tente d'exécuter cette tâche, je reçois le message suivant:

[out :: mysite.com] sh: script/console: No such file or directory 

Je pensais que c'est parce que je ne suis pas dans le bon répertoire , mais en essayant

run "cd ~/user/mysite.com/current" 

au lieu de

run "cd #{release_path}" 

Echoue également. Exécuter exactement les mêmes commandes manuellement (via ssh) fonctionne parfaitement. Pourquoi ne pas capistrano correctement cd (changer de répertoire) dans le répertoire du site pour exécuter la commande?

Merci!


Mise à jour: Picked une réponse, et merci beaucoup à tous ceux qui a répondu. La meilleure réponse peut être le one on server fault, bien que l'essentiel des deux (celui sur la panne du serveur et celui sur le débordement de la pile) est le même.

Répondre

1

Vous voulez utiliser script/runner. Il démarre une instance de l'application pour exécuter la méthode que vous souhaitez appeler. C'est lent car il doit charger l'ensemble de votre application rails.

~/user/mysite.com/current/script/runner -e production FeedEntry.update_all 2>&1 

Vous pouvez exécuter cela à partir de la tâche capistrano.

1

Je ne peux pas imaginer que vous seriez capable de vous connecter à distance à la console des rails de Capistrano. Je vous suggère d'appeler votre méthode de modèle à partir d'une tâche de rake.

How do I run a rake task from Capistrano?

Quant à la dernière partie de votre question, vous se branchent sur le serveur avec le même compte utilisateur que Capistrano?