Ответ от Мэтью Конвея (оставлен ниже): https://groups.google.com/forum/?fromgroups#!searchin/rubber-ec2/504/rubber-ec2/AtEoOf-T9M0/zgda0Fo1qeIJ
Примечание: даже с этим кодом вам нужно сделать что-то вроде:
> cap deploy: update
> FILTER = app01, cap приложения app02 развернуть: перезапустить
> FILTER = app03, app04 cap cap: перезапустить
Я полагаю, это приложение для рельсов? Стек рельсов, как известно, медленно загружается, поэтому эта задержка во времени загрузки, вероятно, то, что вы видите. Пассажир должен был сделать это лучше с функцией нулевого времени простоя v3, но, похоже, он отказался от этого и собирается предлагать ее только как часть неоплаченной платной версии в какой-то неопределенной точке в будущем.
Что я делаю, так это имею несколько экземпляров сервера приложений и перезагружаю их последовательно, чтобы я мог продолжать обслуживать трафик на одном, пока другие перезагружаются. Не работает с одним экземпляром, но большинству производственных установок в любом случае требуется несколько экземпляров для избыточности / надежности. На данный момент это не часть резины, но я настроил сценарии развертывания для моего приложения и в какой-то момент объединю его - моя конфигурация выглядит примерно так, как показано ниже.
Мэтт
резино-passenger.yml:
roles:
passenger:
rolling_restart_port: "#{passenger_listen_port}"
web_tools:
rolling_restart_port: "#{web_tools_port}"
разворачивать-apache.rb:
on :load do
rubber.serial_task self, :serial_restart, :roles => [:app, :apache] do
rsudo "service apache2 restart"
end
rubber.serial_task self, :serial_reload, :roles => [:app, :apache] do
# remove file checked by haproxy to take server out of pool, wait some
# secs for haproxy to realize it
maybe_sleep = " && sleep 5" if RUBBER_ENV == 'production'
rsudo "rm -f #{previous_release}/public/httpchk.txt #{current_release}/public/httpchk.txt#{maybe_sleep}"
rsudo "if ! ps ax | grep -v grep | grep -c apache2 &> /dev/null; then service apache2 start; else service apache2 reload; fi"
# Wait for passenger to startup before adding host back into haproxy pool
logger.info "Waiting for passenger to startup"
opts = get_host_options('rolling_restart_port') {|port| port.to_s}
rsudo "while ! curl -s -f http://localhost:$CAPISTRANO:VAR$/ &> /dev/null; do echo .; done", opts
# Touch the file so that haproxy adds this server back into the pool.
rsudo "touch #{current_path}/public/httpchk.txt#{maybe_sleep}"
end
end
after "deploy:restart", "rubber:apache:reload"
desc "Starts the apache web server"
task :start, :roles => :apache do
rsudo "service apache2 start"
opts = get_host_options('rolling_restart_port') {|port| port.to_s}
rsudo "while ! curl -s -f http://localhost:$CAPISTRANO:VAR$/ &> /dev/null; do echo .; done", opts
rsudo "touch #{current_path}/public/httpchk.txt"
end