Ruby on rails 生产中超时,但本地Rails中不超时

Ruby on rails 生产中超时,但本地Rails中不超时,ruby-on-rails,ajax,forms,timeout,Ruby On Rails,Ajax,Forms,Timeout,我正在开发一个Rails应用程序 在视图中,我使用remote:true <%= form_tag({controller: "my_controller", action: "my_method"}, {remote: true}) do %> 每件事都很好,但控制器可能需要一段时间来计算de结果(有时超过100秒) 我面临的问题是,在本地环境中,它工作正常,但在生产环境中,我遇到了错误504 GATEWAY\u TIMEOUT 有没有办法让它在生产中发挥作用 这可能是因为r

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

在视图中,我使用
remote:true

<%= form_tag({controller: "my_controller", action: "my_method"}, {remote: true}) do %>

每件事都很好,但控制器可能需要一段时间来计算de结果(有时超过100秒)

我面临的问题是,在本地环境中,它工作正常,但在生产环境中,我遇到了错误504 GATEWAY\u TIMEOUT


有没有办法让它在生产中发挥作用

这可能是因为rails服务器前面的负载平衡器(可能是apache或nginx)超时了响应,因为这需要很长时间!我最熟悉的是w/Nginx,所以我将带您完成修复


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

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

然后使用
服务重新启动nginx nginx reload
您不应该再看到504s:)

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

一个简单的方法就是延迟工作。以下是关于以下内容的起始文档:


您可能应该使用sidekiq或delayed_job之类的工具将该功能置于后台作业之后。这就是他们的全部目的。你们生产的服务器堆栈是什么?它是Puma+Nginx+PostgreSQL