【问题标题】:Ruby on Rails: How to set a database timeout in application configuration?Ruby on Rails:如何在应用程序配置中设置数据库超时?
【发布时间】:2011-03-31 04:35:55
【问题描述】:

我想将我的数据库设置为在设定的时间内未完成的超时请求,以防止异常请求独占整个应用程序。

我可以在我的 Rails 配置文件中添加什么来设置它吗?

我尝试将我经常在网上看到的timeout: 5000 添加到我的database.yml 中,但这似乎没有任何效果。

我尝试在 environment.rb 中调用 ActiveRecord::Base.connection.execute('set statement_timeout to 5000'),但这会导致 Rails 出错。

我在 Heroku 上运行 Postgres 数据库,我没有直接的数据库访问权限,因此我无法直接使用数据库配置来执行此操作。即使我从 Heroku 控制台远程执行该命令,他们也可以随时重新启动我的应用程序,如果在应用程序启动时没有重新执行此命令,我的更改就会丢失。

【问题讨论】:

    标签: ruby-on-rails database postgresql timeout heroku


    【解决方案1】:

    数据库.yml:

    defaults: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
      min_messages: warning
      variables:
        statement_timeout: 5000
    

    【讨论】:

    • 是5秒还是5000秒?
    • 5000 表示 5 秒。
    【解决方案2】:

    得到这个工作,只需要在 environment.rb 的最后包含该行,而不是在开头或块中。

    【讨论】:

      【解决方案3】:

      试试这个语法:

      SET statement_timeout = 5000;
      

      【讨论】:

      • 不,问题不在于 SQL,当我将 ActiveRecord::Base.connection.execute 粘贴到我的 environment.rb 时出现的错误是 uninitialized constant ActiveRecord
      猜你喜欢
      • 2017-07-07
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多