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 中使用這樣的庫是有問題的
官方指南中沒有關于它的資訊
在資料庫配置頁面上,此類資訊:
Hanami 模型使用 ROM 作為低級后端。這意味著您可以輕松地在您的應用程式中使用任何 Sequel 插件。為此,您需要
gateway在模型配置中定義一個塊,通過呼叫添加擴展extension名gateway.connection并將擴展名傳入:# 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 應用程式中獲取連接實體?
uj5u.com熱心網友回復:
Hanami 中有配置物件——Hanami::Model.configuration
實際上它是實體變數的getter@configuration
它是的實體,并Hanami::Model::Configuration具有諸如 、等實體變數。所以可以呼叫 getter 來獲取它們@url@entities@logger
它也有connection方法。該方法回傳gateway.connection
這gateway.connection正是我們所需要的。這正是連接到資料庫的實體,您可以在其上呼叫方法
例如
Hanami::Model.configuration.connection.advisory_lock('my_lock') do
# do stuff with lock
end
我想指出,所有這些方法都由注釋指示# @api private。這意味著它們的實作可能會在未來的版本中發生變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484999.html
下一篇:使用單數或復數從哈希中獲取
