首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问Hanami连接实例

如何访问Hanami连接实例
EN

Stack Overflow用户
提问于 2022-05-26 14:26:50
回答 1查看 36关注 0票数 1

Hanami使用续集作为默认的ORM

续集有不同的插件

有时,要使用它,需要访问数据库连接对象。

例如,对互斥对象使用PostgreSQL咨询锁定

有这样的宝石:续集-咨询锁定锁定

首先,您应该为Sequel::Database实例加载一个扩展

代码语言:javascript
复制
DB.extension(:advisory_locking)

然后在你的应用中像这样使用它

代码语言:javascript
复制
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)端。

我尝试的是在这个配置中定义常量

代码语言:javascript
复制
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应用程序中获得连接实例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-26 14:26:50

在Hanami - Hanami::Model.configuration中有config对象。

实际上,它是用于吸气剂实例变量的@configuration

它是Hanami::Model::Configuration的实例,具有类似于@url@entities@logger实例变量。所以可以打电话给getter

它也有connection方法。这种方法返回gateway.connection

这个gateway.connection正是我们所需要的。这正是连接到数据库的实例,您可以在该实例上调用方法。

例如

代码语言:javascript
复制
Hanami::Model.configuration.connection.advisory_lock('my_lock') do
  # do stuff with lock
end

我想指出,所有这些方法都由注释# @api private表示。这意味着它们的实现在将来的版本中可能会改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72393431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档