Ruby on rails Nginx、乘客、rails-如何配置长时间运行的请求?

Ruby on rails Nginx、乘客、rails-如何配置长时间运行的请求?,ruby-on-rails,timeout,nginx,passenger,Ruby On Rails,Timeout,Nginx,Passenger,我的情况是这样的: 1.用户上传150MB的zip文件,里面有600个文件。将文件上载到服务器大约需要4分钟。 2.服务器处理文件内容,大约需要70秒。 3.服务器响应服务不可用,日志为“无法将响应转发到客户端…已单击停止按钮” 4.Rails应用程序日志显示,返回了200 OK响应 所以,我猜这一定是Nginx或Passenger中的一个问题,导致它返回错误,即使它在Rails应用程序中运行正常。我的怀疑是超时设置,因为我可以通过在长时间运行的方法中放置180秒的睡眠时间而不执行任何操作来复制

我的情况是这样的: 1.用户上传150MB的zip文件,里面有600个文件。将文件上载到服务器大约需要4分钟。 2.服务器处理文件内容,大约需要70秒。 3.服务器响应服务不可用,日志为“无法将响应转发到客户端…已单击停止按钮” 4.Rails应用程序日志显示,返回了200 OK响应

所以,我猜这一定是Nginx或Passenger中的一个问题,导致它返回错误,即使它在Rails应用程序中运行正常。我的怀疑是超时设置,因为我可以通过在长时间运行的方法中放置180秒的睡眠时间而不执行任何操作来复制它


如果你们知道具体的nginx/passenger配置可以解决这个问题,我将不胜感激。

我假设
nginx
是面向公众的服务器,它会将请求代理到另一台运行您的RoR应用程序的服务器。如果此假设是正确的,您可能需要增加导致您出现问题的特定位置的
nginx
设置值

我假设
nginx
是面向公众的服务器,它将请求代理到另一台为您运行RoR应用程序的服务器。如果此假设是正确的,您可能需要增加导致您出现问题的特定位置的
nginx
设置值

对于长时间运行的请求,我认为您应该立即返回一个“请等待”页面,并将处理背景设置为。处理完成后,将数据库中的任务设置为“已完成”。在此期间内,每当用户刷新页面时,立即返回“请稍候”。完成后,返回结果。您可以在页面中设置自动刷新超时,以便在估计的时间段后刷新页面。

对于长时间运行的请求,我认为您应该立即返回“请等待”页面,并使处理成为背景。处理完成后,将数据库中的任务设置为“已完成”。在此期间内,每当用户刷新页面时,立即返回“请稍候”。完成后,返回结果。您可以在页面中设置AutoRoad超时,在估计的周期之后刷新页面。

< P>如果您使用S3作为存储,您可以考虑使用像CaveReaveWieldIt这样的东西跳过文件,通过Web服务器,而直接上传到S3。

如上所述,您可以合并一个排队过程,如延迟作业


< P>如果你使用S3作为你的存储,你可以考虑使用像CaveRaveWiNoto之类的东西来跳过文件,通过Web服务器,而直接上传到S3. ./P> 如上所述,您可以合并一个排队过程,如延迟作业


我会立即将上传内容存储在某个地方,并重定向到“请稍候”页面,该页面询问后台处理的状态,甚至可以显示一些进度条,例如使用ajax


对于实际的后台处理,我建议使用DelayedJob,它非常适合我们,支持轻松的作业部署和实施。

我会立即将上传内容存储在某个地方,并重定向到“请等待”页面,该页面询问后台处理的状态,甚至可以显示一些进度条,例如,使用ajax


对于实际的后台处理,我建议使用DelayedJob,它对我们非常有用,并且支持轻松的作业部署和实施。

为了澄清:在您的第2步中,
nginx
厌倦了等待
乘客的响应,并将
503
发送回客户。一段时间后,Rails完成并将
200
发送回
nginx
,但由于
nginx
已发送响应,因此无法转发到客户端。我尝试了代理读取超时,但没有任何帮助。这一阶段有点令人沮丧,因为我只在prod中看到这个问题,而在运行nginx/passenger的开发环境中看不到。我也有同样的问题,并且无法访问amazon Elastic Beanstalk上的nginx配置=(.有什么帮助吗?澄清一下:在您的第2步中,
nginx
对等待
passenger
的响应感到厌烦,并将
503
发送回客户端。之后,Rails会完成并将
200
发送回
nginx
,但由于
nginx已经发送了响应。我尝试了代理读取超时,但没有帮助。这一阶段有点令人沮丧,因为我只在prod中看到这个问题,而在运行nginx/passenger的开发环境中没有看到。我也遇到了同样的问题,并且无法访问amazon Elastic Beanstalk=(.有什么帮助吗?