gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:52:39 25 4
gpt4 key购买 nike

我有一个在 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例如。还有很多其他的队列。

    关于ruby-on-rails - 如何配置nginx+Unicorn避免超时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138047/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com