Ruby on rails 如何在rails中设置postgresql命令超时
我正在使用heroku和heroku postgresql。如何设置db命令超时,以便在sql命令耗时超过10秒时出现异常?我不知道ruby,但在PostgreSQL中,您可以简单地运行以下命令:Ruby on rails 如何在rails中设置postgresql命令超时,ruby-on-rails,postgresql,heroku,Ruby On Rails,Postgresql,Heroku,我正在使用heroku和heroku postgresql。如何设置db命令超时,以便在sql命令耗时超过10秒时出现异常?我不知道ruby,但在PostgreSQL中,您可以简单地运行以下命令: SET statement_timeout = '10s' 之后,此连接(会话)中的所有查询都将对运行时进行严格限制 您还可以在postgresql.conf中将其更改为全局默认值,甚至在给定数据库或给定用户中设置为默认值,如: ALTER DATABASE web SET statement_ti
SET statement_timeout = '10s'
之后,此连接(会话)中的所有查询都将对运行时进行严格限制
您还可以在postgresql.conf中将其更改为全局默认值,甚至在给定数据库或给定用户中设置为默认值,如:
ALTER DATABASE web SET statement_timeout = '10s';
ALTER USER bad_user SET statement_timeout = '10s';
我在这里找到了一个解决方案:
加
在environment.rb
文件的末尾
有人认为有更好的方法吗?像这样配置您的database.yml,关键位是变量哈希:
defaults: &default
adapter: postgresql
encoding: unicode
pool: 5
min_messages: warning
variables:
statement_timeout: 5000
添加
到environment.rb
文件的末尾,该文件对我不起作用
起作用的是增加
ActiveRecord::Base.connection.execute("SET statement_timeout = '10s'")
初始化文件。此命令通过ActiveRecord连接从另一个应答运行SQL命令,以便在连接期间保持该状态。这应该是有效的。这在heroku行得通吗?i、 e heroku在30秒后切断您的工作连接?您还可以
设置每个会话的其他参数:如果我运行rails dbconsole
,然后SHOW statement\u timeout代码>它说我没有任何语句超时。如果这样做有效,有没有办法验证它是否有效?我在railsdb
中看到了相同的行为。验证它的最简单方法是类似于User。从rails控制台中选择('pg_sleep(10)
),并验证它是否在5秒后超时,或者您将其配置为什么。是否有任何方法仅将其添加到前端,而不添加到后台工作人员(Sidekiq)?确定。yml可以包含ERB(ruby logic),因此您可以传递命令行标志或为该进程类型设置环境变量,然后在超时配置上执行if。
ActiveRecord::Base.connection.execute('set statement_timeout to 10000')
ActiveRecord::Base.connection.execute("SET statement_timeout = '10s'")