Ruby Sequel模块中的事务:如何获取DB对象?

我正在使用Sequel在Sinatra应用程序中工作。

我想做一个事务,根据我必须使用DB对象的手册,我怎样才能从我的代码的任何部分获取这个对象?

您可以在基础app.rb(或等效的)中定义它,也可以包含一个单独的文件,您可以根据需要配置DB对象。

例如,在我的一个Sinatra应用程序中,我有一个app.rb,其中包含一个

 class App < Sinatra::Application #lots of stuff here... end require_relative 'models/init' 

在我的models / init.rb中,我配置了DB

 require 'sequel' conf = YAML.load(File.open(File.expand_path('./config/dbconn.yml'))) env = ENV['RACK_ENV'] || 'development' DB = Sequel.connect(host:conf['database'][env]['host'], port:conf['database'][env]['port'], database:conf['database'][env]['schema'], username:conf['database'][env]['username'], password:conf['database'][env]['password'], adapter:conf['database'][env]['adapter'], encoding:conf['database'][env]['encoding']) raise "Unable to connect to #{conf['database'][env]['host']}" unless DB.test_connection ... 

这是一种方式。 希望能帮助到你。

您提到要从代码的任何部分引用; 但是我发现封装在模型中的是我倾向于包装交易的地方; 从那里它相对容易:

 class X < Sequel::Model def self.y self.db.transaction { ... end end def z db.transaction { ... } end end