2012-03-11 117 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

相关问题