Hanami使用续集作为默认的ORM
续集有不同的插件
有时,要使用它,需要访问数据库连接对象。
例如,对互斥对象使用PostgreSQL咨询锁定
首先,您应该为Sequel::Database实例加载一个扩展
DB.extension(:advisory_locking)然后在你的应用中像这样使用它
DB.advisory_lock('my_key') do
# do stuff with lock
end但是,与Hanami一起使用这样的库是有问题的。
官方指南中没有这方面的信息。
在数据库配置页面上,这样的信息:
Hanami模型使用ROM作为一个低级后端.这意味着你可以很容易地在你的应用程序中使用任何续集插件。为此,您需要在模型配置中定义一个
gateway块,通过调用gateway.connection上的extension添加扩展,并将扩展名传递到:config/ Hanami.configure do模型网关define (:connection_validator)端。
我尝试的是在这个配置中定义常量
Hanami.configure do
model do
gateway do |g|
DB = g.connection
DB.extension(:connection_validator)
DB.extension(:advisory_locking)
end
end
end然后在应用程序中的某个地方使用这个DB,例如DB.advisory_lock('my_key') { do_stuff_with_lock }
但是,在块中定义的这样的常量看起来不太好。
如何在Hanami应用程序中获得连接实例?
发布于 2022-05-26 14:26:50
在Hanami - Hanami::Model.configuration中有config对象。
实际上,它是用于吸气剂实例变量的@configuration
它是Hanami::Model::Configuration的实例,具有类似于@url、@entities、@logger等实例变量。所以可以打电话给getter
它也有connection方法。这种方法返回gateway.connection
这个gateway.connection正是我们所需要的。这正是连接到数据库的实例,您可以在该实例上调用方法。
例如
Hanami::Model.configuration.connection.advisory_lock('my_lock') do
# do stuff with lock
end我想指出,所有这些方法都由注释# @api private表示。这意味着它们的实现在将来的版本中可能会改变。
https://stackoverflow.com/questions/72393431
复制相似问题