在Rails中,是否可能仅针对Web查询为数据库设置statement_timeout?

9

能否为 Ruby on Rails 中仅针对 Web 查询(Postgres)设置语句超时(statement_timeout),而不是针对 Sidekiq 工作者/任务?原因是 Heroku Web 查询在 30 秒后会超时,因此在 Puma 中终止查询是有意义的。但我希望 Sidekiq 数据库查询能够执行更长时间。

我已经尝试在 database.yml 中进行类似以下方式的设置:

  primary:
    <<: *default
    url: <%= ENV['DATABASE_URL']) %>
    variables:
      statement_timeout: <%= ENV["STATEMENT_TIMEOUT"] || "0" %>

然后在我的 Procfile 中这样做:

web: STATEMENT_TIMEOUT=30s bundle exec puma

但是没有起作用。语句超时会在几个请求后被重置为0。


你使用的是哪个ORM? - RangerRanger
使用 ActiveRecord - concept47
1个回答

1

可能是语法问题;我在 MS 上写的,它可以正常工作。

web: STATEMENT_TIMEOUT=30000 bundle exec puma

我将其翻转以为我的工人提供覆盖,否则默认为27秒:
# database.yml
<% statement_timeout = ENV['STATEMENT_TIMEOUT'] || '27000' %>

production:
  ...
  variables:
    statement_timeout: <%= statement_timeout %>

在我的 Procfile 中:
web: bundle exec puma -C config/puma.rb
worker: STATEMENT_TIMEOUT=600000 rake jobs:work

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接