生产超时但不在本地Rails中

时间:2017-11-16 10:10:17

标签: ruby-on-rails ajax forms timeout

我正在开发一个Rails应用程序。

在视图中,我创建了一个表单,使用remote: true

将操作发送到AJAX中的控制器
<%= form_tag({controller: "my_controller", action: "my_method"}, {remote: true}) do %>

每件事都运行正常,但控制器可能需要一段时间来计算结果(有时超过100秒)。

我面临的问题是在本地环境中它工作正常,但在生产环境中,我得到 ERROR 504 GATEWAY_TIMEOUT

有没有办法让它在生产中运作?

2 个答案:

答案 0 :(得分:0)

这可能是由于您的rails服务器前面的负载均衡器(可能是apache或nginx)超时响应,因为它花了这么长时间!我最熟悉w / Nginx,所以我会引导你完成修复。

如果在nginx.conf中将响应超时设置为10分钟(600秒):

proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600;

然后用service nginx reload重新启动nginx,你不应再看到504了:)

答案 1 :(得分:0)

你的作品是Heroku吗?你需要把它变成后台工作。根据经验(至少在Heroku上)如果 运行时间超过2秒,则需要在后台工作。

一种简单的方法是使用delayed_job。以下是关于此的开始文档:

Active job basics