我很擔心不得不停止服務器,用控制版本更新代碼,然後運行更新生產代碼的正確方法?
$ rake assets:預編譯,等待,然後啓動服務器。當我這樣做的時候,在線用戶會被一個破損的網站激怒。
有沒有更好的方法?也許有一種方法可以進入「維護模式」,以便用戶知道發生了什麼?
我很擔心不得不停止服務器,用控制版本更新代碼,然後運行更新生產代碼的正確方法?
$ rake assets:預編譯,等待,然後啓動服務器。當我這樣做的時候,在線用戶會被一個破損的網站激怒。
有沒有更好的方法?也許有一種方法可以進入「維護模式」,以便用戶知道發生了什麼?
Capistrano是最常用的部署解決方案之一。它使您可以將您的網站設置爲維護模式。我強烈建議使用它。
如果您運行的應用程序不止一個實例,則可以一次更新一個實例,以防止停機,但某些數據庫更改除外。
如果必須手動執行此操作,(假設你的Web服務器設置爲從公用文件夾提供靜態文件)您可以在公共目錄中創建一個index.html文件,並再次刪除它,當你完成更新。
您不應該中斷要部署的生產服務器。部署應該是無縫的。查看像capistrano這樣的部署解決方案。
隨着獨角獸和卡皮斯特拉諾你可以優雅地重新啓動你的應用程序。
set(:unicorn_config) {"#{current_path}/config/unicorn.rb"}
set(:unicorn_pid) {"#{current_path}/../../shared/pids/unicorn.pid"}
namespace :deploy do
task :start, :roles => :app, :except => { :no_release => true } do
run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec unicorn_rails -C#{unicorn_config} -E #{rails_env} -D"
end
task :stop, :roles => :app, :except => { :no_release => true } do
begin
run "kill `cat #{unicorn_pid}`"
rescue
puts "Can't kill unicorn - probably not running"
end
end
task :graceful_stop, :roles => :app, :except => { :no_release => true } do
run "kill -s QUIT `cat #{unicorn_pid}`"
end
task :reload, :roles => :app, :except => { :no_release => true } do
run "kill -s USR2 `cat #{unicorn_pid}`"
end
task :restart, :roles => :app, :except => { :no_release => true } do
run "if [ -f #{unicorn_pid} ]; then kill -USR2 `cat #{unicorn_pid}`; else cd #{deploy_to}/current && RAILS_ENV=#{rails_env} bundle exec unicorn_rails -C#{unicorn_config} -E #{rails_env} -D; fi"
end
end
有趣,謝謝。但我想我現在會堅持乘客 – HappyDeveloper 2012-02-20 17:32:31
index.html只會更改主頁。好吧,我會嘗試capistrano,我希望它不是太複雜。 – HappyDeveloper 2012-02-20 14:54:49