【问题标题】:How to set application_name with sinatra/sequel如何使用 sinatra/sequel 设置 application_name
【发布时间】:2013-10-04 18:03:46
【问题描述】:

我在我的连接字符串中设置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),Sequel 是 (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的任何想法/想法?

【问题讨论】:

  • 我建议将其加入 Sequel-Talk 邮件列表。 Stack Overflow 非常深奥。 Jeremy Evans 会定期在这里回答问题,但他会监控邮件列表。
  • 另外,通读 PostgrSQL 的 Sequel 适配器文档:sequel.rubyforge.org/rdoc-adapters/index.html。 Sequel 是纯 Ruby,因此您应该能够在必要时轻松阅读源代码。您可以收集一些有用的信息来了解可能缺少哪些驱动程序功能,并修补或覆盖以添加您想要的内容。当我使用大型数据库并且需要表的模式转储但无法获得我想要的信息时,我这样做了。

标签: ruby postgresql sinatra sequel


【解决方案1】:

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 中使用它可以正常工作。如果其他人认为它有用,我愿意接受。

【讨论】:

  • 这就是我要找的! DB = Sequel.connect(:adapter=>'postgres', :host=> 'localhost', :database=>'blah', :user=>'gator', :max_connections => 10, :after_connect=>(proc do |conn| conn.execute("SET application_name TO 'blahwebapp'") end))
猜你喜欢
  • 2013-12-03
  • 2016-12-26
  • 2023-04-01
  • 2013-12-31
  • 2013-06-01
  • 2013-03-19
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多