2013-03-30 80 views
3

如果我想忍受部署後手動停止和啓動獨角獸造成的停機時間,應用部署會很好。但是,我想使用零宕機時間獨角獸設置,但它不起作用,因爲啓動的新獨角獸進程正在查看舊的部署發佈路徑。沒什麼特別的,簡單的蓋重啓,deploy.rb:Unicorn + Capistrano零停機部署 - 未切換到新版本

desc "Zero-downtime restart of Unicorn" 
    task :restart, :except => { :no_release => true } do 
     run "cd #{current_path}; #{try_sudo} kill -s USR2 `cat /var/www/appname/shared/pids/unicorn.pid`" 
    end 

我知道它在尋找錯誤的目錄,因爲如果意見不改變,如果我設置keep_releases 1或2,麒麟日誌將顯示一個錯誤,因爲它試圖啓動目錄被刪除:

/var/www/appname/shared/bundle/ruby/1.9.1/gems/unicorn-4.4.0/lib/unicorn/http_server.rb:425:in `chdir': No such file or directory - /var/www/appname/releases/20130330104246 (Errno::ENOENT) 

我一直在努力,現在打開和關閉調試這幾個星期。任何幫助得到這個工作非常感謝!

回答

6

開始麒麟

BUNDLE_GEMFILE=$APP_PATH/current/Gemfile 

時,否則,它會在一個特定的release目錄,這將導致您所描述的行爲指向設置此環境變量。

例如。

cd $APP_PATH/current && BUNDLE_GEMFILE=$APP_PATH/current/Gemfile bundle exec unicorn_rails -c $APP_PATH/current/config/unicorn.rb -E $RAILS_ENV -D