如何使用sinatra / sequel设置application_name

时间:2013-09-28 13:53:25

标签: ruby postgresql sinatra sequel

我在连接字符串中设置application_name,如下所示:

DB = Sequel.connect(:adapter=>'postgres', :host=> 'localhost',
:database=>'blah', :user=>'gator',
:application_name => 'blahwebapp')

但是,当我查看pg_stat_activity或任何其他指标按application_name过滤时,我没有看到它被正确分配。

我的Pg gem是“pg(0.17.0)”,我相信自0.16以来它能够处理应用程序名称。 sequel_pg是(1.6.8),续集是(4.2.0)。

设置了应用程序名称,但它与路径/网络服务器相关,而不是在配置中设置的内容:

/Users/gator/.rvm/gems/rub...47@blahwebapp/bin/shotgun

即使我使用URL类型的连接字符串,它仍然没有注册application_name

DB = Sequel.connect('postgres://gator@localhost/blah?application_name=blahwebapp')

这是我在psql中使用的相同URL连接,它显示正常。

在续集的the documentation中,我没有太多关于application_name作为让我担心的选项:

关于如何让它尊重application_name

的任何想法/想法

1 个答案:

答案 0 :(得分:2)

Sequel的PostgreSQL适配器不会将URL直接传递给PostgreSQL。它不能真正这样做并保持向后兼容性。

看起来你可以在运行时设置application_name。使用Sequel的最佳方法是通过after_connect:

DB = Sequel.connect('postgres://gator@localhost/blah', :after_connect=>proc{|c| c.execute("SET application_name TO 'blahwebapp'")})

可以将此功能集成到Sequel中,以便在'postgres://'URL中使用它可以正常工作。如果其他人认为它会有用,我会对此持开放态度。