设置独角兽超时时间

14

我使用的是rails 3.0.11ruby 1.9.3-p0nginx 1.0.4unicorn 3.6.2来完成项目。但我遇到了一个问题。

我需要在服务器上进行长时间操作,大约需要150秒。在这种情况下,一切工作正常。

我在location中设置了我的nginx配置。

proxy_read_timeout 240;
proxy_send_timeout 240;

并使用以下命令设置我的unicorn.rb文件。

timeout 240

但我总是收到 502 bad gateway 错误。 我认为问题出在独角兽(unicorn)上。这是我获取的独角兽日志

E, [2012-05-21T11:52:21.052382 #30423] ERROR -- : worker=1 PID:30871 timeout (104.052329915s > 60s), killing
E, [2012-05-21T11:52:21.080378 #30423] ERROR -- : reaped #<Process::Status: pid 30871 SIGKILL (signal 9)> worker=1
I, [2012-05-21T11:52:21.105045 #30423]  INFO -- : worker=1 spawning...
I, [2012-05-21T11:52:21.111148 #894]  INFO -- : worker=1 spawned pid=894   
I, [2012-05-21T11:52:21.111659 #894]  INFO -- : Refreshing Gem list

你能帮我吗? 我会非常感激。 谢谢。


你确定这个“独角兽文件”已经被加载了吗?你是如何进行加载的? - Maurício Linhares
我使用 capistrano-deploy gem 来重新加载 unicorn。有趣的是 unicorn.rb 文件在 Unix 的 home 文件夹中,但 Rails 应用程序却在 web-app 文件夹中。我以前从未遇到过类似的情况。 - caulfield
3
我从未使用过这个宝石,但如果您是在 'deploy:restart', 'unicorn:reload' 之后执行此操作,则需要重新启动 unicorn 而不仅是重新加载。请执行 sudo /etc/init.d/unicorn restart,这样超时时间就会被设置。在 unicorn 中,重新加载和重新启动是两个不同的概念。 - Maurício Linhares
是的。我解决了unicorn.rb的问题,原来家里的文件是从/etc/unicorn复制过来的。天哪,重启后它就一直在工作了。谢谢你,你帮了我大忙。但解决方案有点有趣。 - caulfield
1
@MaurícioLinhares - 如果您想要把解决方案总结成自己的答案,我会删除我的回答。(请参见http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments以了解为什么这很有帮助)。谢谢! - DreadPirateShawn
你给了信用,我很满意 :) - Maurício Linhares
2个回答

9

以下是评论中的答案,为了将这个问题从“未回答”过滤器中移除:

我从未使用过这个 gem,但如果你在 'deploy:restart', 'unicorn:reload' 后进行这个操作,你需要重启 unicorn,而不只是重新加载。使用 sudo /etc/init.d/unicorn restart 命令即可设置超时时间。在 unicorn 中,reload 和 restart 是两个不同的操作。

~ 摘自 Maurício Linhares 的回答


1
在更改config/unicorn/production.rb中的超时时间后,我需要运行:
cap deploy

然后停止并启动Unicorn主进程以使用以下方式获取新配置:

cap unicorn:stop
cap unicorn:start

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接