我正在开发一个Rails应用程序。
在视图中,我制作了一个表单,该表单通过使用remote: true
将操作发送到 AJAX 中的控制器
<%= form_tag({controller: "my_controller", action: "my_method"}, {remote: true}) do %>
一切都工作正常,但控制器可能需要一段时间来计算结果(有时超过 100 秒(。
我面临的问题是在本地环境中它工作正常,但在生产环境中,我收到错误 504 GATEWAY_TIMEOUT
有没有办法让它在生产中工作?
这可能是由于您的 rails 服务器前面的负载均衡器(可能是 apache 或 nginx(使响应超时,因为它需要很长时间! 我最熟悉的是 Nginx,所以我将引导您完成那里的修复。
如果在 nginx.conf 中将响应超时设置为 10 分钟(600 秒(:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
然后重新启动nginx,service nginx reload
你不应该再看到504了:)
你的生产是Heroku吗?您需要将其放入后台作业中。根据经验(至少在 Heroku 上(,如果它可以运行超过 2 秒,则需要在后台作业中。
一个简单的方法是使用delayed_job。以下是这方面的起始文档:
活动作业基础知识