Rails:仅为前端设置语句超时(不适用于 Sidekiq)

Rails: set statement timeout only for frontend (not for Sidekiq)

我看到有一种方法可以设置超时:

有没有办法只在前端而不是 Sidekiq 添加语句超时? 即在后台工作人员中可以接受长 运行 查询

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

或者相反:让默认值非常短,并为您的工作人员设置一个覆盖环境变量,允许更长的 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 %>

如果您使用的是 ActiveJob,那么简单 运行 您在 before_perform 块中链接 () 的问题中提出的解决方案怎么样?

像这样:

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

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