2012-03-11 83 views
2

我正在使用Capistrano部署我的rails應用程序。 一旦我對我的應用程序進行了更改,我會執行「cap deploy」,它似乎正常工作,但更改不會生效。我總是必須做「cap deploy:stop」和「cap deploy:start」,然後一切都很好。 所以我想它與部署更改時運行的「cap deploy:restart」有關。Capistrano:「cap deploy」在部署Rails應用程序時不起作用

這裏是我的deploy.rb:deploy.rb gist

希望有人可以提供幫助。

如果重新啓動麒麟使用USR2信號它不會自動知道打捆正確的環境預先感謝您

+0

你可以做一個完整的部署和管道輸出到一個日誌,就像:'cap deploy> deploy.log 2>&1'' – wintersolutions 2012-03-11 17:37:45

+0

@PizzaPill它是:[deploy.log](https:// gist .github.com/2017379) – cantonic 2012-03-11 17:51:21

回答

1

在你要點

task :restart, :except => { :no_release => true } do 
    if File.exist?("/tmp/unicorn.example.pid") 
    run "kill -s USR2 `cat /tmp/unicorn.example.pid`" 
    end 
end 

你正在爲你的本地計算機上的PID文件存在測試只注意到在行(105)。相反,你應該在你的服務器上這樣做。嘗試將其更改爲

task :restart, :except => { :no_release => true } do 
    run "test -f /tmp/unicorn.example.pid && kill -s USR2 `cat /tmp/unicorn.example.pid`" 
end 

但請記住,如果pid文件丟失,它仍然會自動失敗。

+0

你確定這是檢查我的本地機器上的文件存在嗎?因爲我剛從[本教程]中獲得了deploy.rb(http://ariejan.net/2011/09/14/lighting-fast-zero-downtime-deployments-with-git-capistrano-nginx-and-unicorn)並認爲它會很好... – cantonic 2012-03-11 20:15:37

+0

這不是在教程中的權利? :) – iltempo 2012-03-11 22:02:54

+0

我做了這個改變,但我仍然必須做帽部署:停止和帽部署:開始:( – cantonic 2012-03-12 12:03:39