J'ai un fichier Capfile pour les déploiements en plusieurs étapes qui doit déployer le code sur un serveur (NFS) et redémarrer plusieurs serveurs d'applications. Les rôles ne peuvent donc pas être utilisés facilement car les serveurs d'applications n'ont pas besoin d'être utilisés pour le déploiement: update_code. J'ai trouvé quelque chose qui pourrait fonctionner, mais j'ai un problème qui doit être résolu.Problème avec: hôtes
application_servers = nil
task :production do
role :nfs, "nfs.someserver.net"
application_servers = "app.someserver.net"
end
task :staging do
role :nfs, "nfs-staging.someserver.net"
application_servers = "app-staging.someserver.net"
end
desc "tail resin logs #{resin_logs}"
task :tail, :hosts => application_servers do
puts("Server is:"#{application_servers})
stream "tail -f #{resin_logs}"
end
Et lors de l'exécution:
#$ cap staging tail
* executing `staging'
* executing `tail'
Server is:app-staging.someserver.net
* executing "tail -f /log/resin/*.log"
servers: ["nfs-staging.someserver.net"]
[nfs-staging.someserver.net] executing command
tail: cannot open `/log/resin/*.log' for reading: No such file or directory
tail: no files remaining
command finished
failed: "sh -c 'tail -f /log/resin/*.log'" on nfs-staging.someserver.net
Lorsque la valeur d'impression de application_servers dans la queue de la tâche, il est dit "app-staging.someserver.net", mais la valeur utilisée dans: hosts => application_servers est vide (c'est pourquoi il utilise le rôle nfs à la place).
Pourquoi la variable application_server a-t-elle deux valeurs différentes? Est-ce un problème de portée? J'ai essayé avec global ($) et cela ne fonctionne pas aussi bien.