Sequel を使用して Sinatra アプリケーションで作業しています。
DBオブジェクトを使用する必要があるマニュアルに従って、トランザクションを作成したいのですが、コードの任意の部分からこのオブジェクトを取得するにはどうすればよいですか?
Sequel を使用して Sinatra アプリケーションで作業しています。
DBオブジェクトを使用する必要があるマニュアルに従って、トランザクションを作成したいのですが、コードの任意の部分からこのオブジェクトを取得するにはどうすればよいですか?
ベースのapp.rb(または同等のもの)で定義するか、必要に応じてDBオブジェクトを構成する別のファイルを含めることができます。
たとえば、私のSinatraアプリの1つに、
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
...
それが1つの方法です。それが役に立てば幸い。
コードの任意の部分から参照したいと述べています。ただし、モデル内にカプセル化されているのは、トランザクションをラップする傾向があることです。そこからは比較的簡単です。
class X < Sequel::Model
def self.y
self.db.transaction {
...
end
end
def z
db.transaction {
...
}
end
end