У меня есть Capfile для многоступенчатого развертывания, которому необходимо развернуть код на одном сервере (NFS) и, наконец, перезапустить несколько серверов приложений. Поэтому роли не могут быть легко использованы, поскольку серверы приложений не нужно использовать для развертывания: update_code. Я придумал что-то, что могло бы работать, но есть проблема, которую нужно решить.
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
А при запуске:
#$ 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
При печати значения application_servers в хвосте задачи он говорит "app-staging.someserver.net", но значение, используемое в: hosts => application_servers, пусто (поэтому вместо него используется роль nfs).
Почему переменная application_server имеет два разных значения? Это проблема объема? Я попытался с глобальным ($), и это не работает также.