41 votes

Comment pouvez-vous vérifier si un fichier existe (sur le serveur distant) dans Capistrano ?

Comme beaucoup d'autres que j'ai vu dans le Googleverse, j'ai été victime de la File.exists? piège, qui vérifie bien sûr votre système de fichiers local, pas le serveur que vous déployez à.

J'ai trouvé un résultat qui a utilisé un hack shell comme si [[-d ' shared_path'images]; Puis... mais cela ne s'assoit pas bien avec moi, à moins qu'il n'ait été bien enveloppé dans une méthode Ruby.

Quelqu'un at-il résolu cela avec élégance?

58voto

Matt Connolly Points 4851

Dans capistrano 3, vous pouvez faire :

C'est agréable parce qu'il renvoie le résultat de l'essai à distance de retour à votre programme de rubis local et vous pouvez travailler dans des commandes shell plus simples.

48voto

Patrick Reagan Points 762

@knocte est juste qu' capture est problématique parce que, normalement, tout le monde objectifs de déploiements à plus d'un hôte (et de capturer uniquement obtient la sortie de la première). Afin de vérifier sur tous les hôtes, vous aurez besoin d'utiliser invoke_command à la place (qui est ce que l' capture utilise en interne). Voici un exemple où j'ai vérifier qu'un fichier existe dans tous appariés serveurs:

def remote_file_exists?(path)
  results = []

  invoke_command("if [ -e '#{path}' ]; then echo -n 'true'; fi") do |ch, stream, out|
    results << (out == 'true')
  end

  results.all?
end

Notez que invoke_command utilise run par défaut -- vérifier les options que vous pouvez passer plus de contrôle.

22voto

Teflon Ted Points 2823

Inspiré par @bhups réponse, avec des tests :

5voto

bhups Points 6257

Peut-être que vous voulez faire est:

4voto

Je l'ai fait avant d'utiliser la commande d'exécution dans capistrano (qui exécutent une commande shell sur le serveur distant)

Par exemple, voici une tâche capistrano qui permettra de vérifier si une database.yml existe dans le répertoire partagé/configs et de le lier s'il existe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X