如何访问 Hanami 连接实例
How to get access to Hanami connection instance
Hanami 使用 Sequel 作为默认 ORM
Sequel
有不同的插件
有时要使用它,您需要访问数据库连接对象
例如对互斥体使用 PostgreSQL 咨询锁定
有这样的宝石:sequel-advisory-locking, sequel-pg_advisory_lock
首先,您应该为 Sequel::Database
个实例加载一个扩展
DB.extension(:advisory_locking)
然后像这样在您的应用中使用它
DB.advisory_lock('my_key') do
# do stuff with lock
end
但是将此类库与 Hanami 一起使用存在问题
官方指南中没有相关信息
在database configuration页面上这样的信息:
Hanami models use ROM as a low-level backend. This means that you can easily use any Sequel plugins in your app. For this you need to define a gateway
block in your model configuration, add the extension by calling extension
on gateway.connection
and pass the extension name in:
# config/environment.rb
Hanami.configure do
model do
gateway do |g|
g.connection.extension(:connection_validator)
end
end
end
我尝试的是在此配置中定义常量
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应用程序中获取连接实例?
Hanami 中有配置对象 -- Hanami::Model.configuration
实际上是the getter for @configuration
实例变量
它是 Hanami::Model::Configuration
的实例,并且有 instance variables 如 @url
、@entities
、@logger
等。所以可以调用 getters 来获取它们
它还有connection
方法。 This method returns gateway.connection
而这个gateway.connection
正是所需要的。这正是连接数据库的实例,你可以在上面调用方法
例如
Hanami::Model.configuration.connection.advisory_lock('my_lock') do
# do stuff with lock
end
我想指出所有这些方法都由注释 # @api private
指出。这意味着它们的实现可能会在未来的版本中发生变化。
Hanami 使用 Sequel 作为默认 ORM
Sequel
有不同的插件有时要使用它,您需要访问数据库连接对象
例如对互斥体使用 PostgreSQL 咨询锁定
有这样的宝石:sequel-advisory-locking, sequel-pg_advisory_lock
首先,您应该为 Sequel::Database
个实例加载一个扩展
DB.extension(:advisory_locking)
然后像这样在您的应用中使用它
DB.advisory_lock('my_key') do
# do stuff with lock
end
但是将此类库与 Hanami 一起使用存在问题
官方指南中没有相关信息
在database configuration页面上这样的信息:
Hanami models use ROM as a low-level backend. This means that you can easily use any Sequel plugins in your app. For this you need to define a
gateway
block in your model configuration, add the extension by callingextension
ongateway.connection
and pass the extension name in:# config/environment.rb Hanami.configure do model do gateway do |g| g.connection.extension(:connection_validator) end end end
我尝试的是在此配置中定义常量
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应用程序中获取连接实例?
Hanami 中有配置对象 -- Hanami::Model.configuration
实际上是the getter for @configuration
实例变量
它是 Hanami::Model::Configuration
的实例,并且有 instance variables 如 @url
、@entities
、@logger
等。所以可以调用 getters 来获取它们
它还有connection
方法。 This method returns gateway.connection
而这个gateway.connection
正是所需要的。这正是连接数据库的实例,你可以在上面调用方法
例如
Hanami::Model.configuration.connection.advisory_lock('my_lock') do
# do stuff with lock
end
我想指出所有这些方法都由注释 # @api private
指出。这意味着它们的实现可能会在未来的版本中发生变化。