加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何配置nginx Unicorn以避免超时错误?

发布时间:2020-12-17 04:17:35 所属栏目:百科 来源:网络整理
导读:我有一个在nginx Unicorn(Ubuntu 12.04)上运行的Rails(v3.2.13,Ruby 2.0.0)应用程序.一切都运行良好,除非管理员用户通过CVS文件上传用户(数千).问题是我将超时设置为30秒,导入过程需要更多时间.所以,30秒后我得到一个nginx 502 Bad Gateway页面(Unicorn work
我有一个在nginx Unicorn(Ubuntu 12.04)上运行的Rails(v3.2.13,Ruby 2.0.0)应用程序.一切都运行良好,除非管理员用户通过CVS文件上传用户(数千).问题是我将超时设置为30秒,导入过程需要更多时间.所以,30秒后我得到一个nginx 502 Bad Gateway页面(Unicorn worker被杀).

显而易见的解决方案是增加超时,但我不希望这样,因为它会导致另一个问题(我猜),因为它不是典型的行为.

有办法处理这类问题吗?

非常感谢提前.

PS:也许解决方案是修改代码.如果是这样,我想避免用户执行另一个请求.

一些想法(不知道是否可能):

>设置专门处理此请求的工作人员.
>向Unicorn发送“正在进行中的工作”信号以避免被杀.

nginx的-app.conf

upstream xxx {
  server unix:/tmp/xxx.socket fail_timeout=0;
}


server {
  listen   80; 

  ...

  location / {

    proxy_pass  http://xxx;
    proxy_redirect     off;
    ...

    proxy_connect_timeout      360;
    proxy_send_timeout         360;
    proxy_read_timeout         360;
  }
}

unicorn.rb

worker_processes 2

listen "/tmp/xxx.socket"

timeout 30

pid "/tmp/unicorn.xxx.pid"

解决方法

这是创建队列的一个很好的理由.
而且你会:

>上传csv文件(应该在30秒内)
>您的后台作业将导入用户数据(可能需要几个小时……)
>当这项工作正在进行时,您可以提供某种具有工作状态/百分比/等的WIP页面.

例如,检查https://github.com/resque/resque.还有很多其他队列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读