2012-02-20 52 views
0

我很擔心不得不停止服務器,用控制版本更新代碼,然後運行更新生產代碼的正確方法?

$ rake assets:預編譯
,等待,然後啓動服務器。當我這樣做的時候,在線用戶會被一個破損的網站激怒。

有沒有更好的方法?也許有一種方法可以進入「維護模式」,以便用戶知道發生了什麼?

回答

2

Capistrano是最常用的部署解決方案之一。它使您可以將您的網站設置爲維護模式。我強烈建議使用它。

如果您運行的應用程序不止一個實例,則可以一次更新一個實例,以防止停機,但某些數據庫更改除外。

如果必須手動執行此操作,(假設你的Web服務器設置爲從公用文件夾提供靜態文件)您可以在公共目錄中創建一個index.html文件,並再次刪除它,當你完成更新。

+0

index.html只會更改主頁。好吧,我會嘗試capistrano,我希望它不是太複雜。 – HappyDeveloper 2012-02-20 14:54:49

2

您不應該中斷要部署的生產服務器。部署應該是無縫的。查看像capistrano這樣的部署解決方案。

1

隨着獨角獸和卡皮斯特拉諾你可以優雅地重新啓動你的應用程序。

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 
+0

有趣,謝謝。但我想我現在會堅持乘客 – HappyDeveloper 2012-02-20 17:32:31