【问题标题】:Rails: set statement timeout only for frontend (not for Sidekiq)Rails:仅为前端设置语句超时(不适用于 Sidekiq)
【发布时间】:2020-02-28 07:52:25
【问题描述】:

我看到有办法设置超时:

https://stackoverflow.com/a/28688245/51387

有什么方法可以将语句超时仅添加到前端而不添加到 Sidekiq? 即在后台工作人员中,可以接受长时间运行的查询

【问题讨论】:

  • 如果您在单独的容器中运行 Sidekiq 实例,这是可能的。在环境变量中设置超时值,并在 database.yml 中使用该环境变量。在 env 变量中为 Sidekiq 容器设置不同的值。

标签: ruby-on-rails postgresql timeout sidekiq


【解决方案1】:

这是一个部署时间问题。无论启动什么进程,您的 Web 服务器都应设置适当的环境变量。 export WEB_STATEMENT_TIMEOUT=2

或者反过来:默认很短,为你的worker设置一个覆盖环境变量,允许更长的sql执行时间。

   defaults: &default
    adapter: postgresql
    encoding: unicode
    pool: 5
    min_messages: warning
    variables:
      statement_timeout: <%= ENV["WEB_STATEMENT_TIMEOUT"].present? ? ENV["WEB_STATEMENT_TIMEOUT"] : 600 %>

【讨论】:

    【解决方案2】:

    如果您使用的是 ActiveJob,那么简单地运行您在 before_perform 块中链接的问题 (https://stackoverflow.com/a/14763517/8271939) 中提出的解决方案怎么样?

    类似这样的:

    before_perform { ActiveRecord::Base.connection.execute("SET statement_timeout = '10s'") }
    

    这样,您可以保持整体 database.yml 不变,只在后台作业中注入延长的超时时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-17
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多