我正在将rails应用程序的一部分转换为自己的sinatra应用程序。它有一些很好的工作要做,而不是在app.rb中有一百万的帮助,我把它的一些分成了几个类。如果没有访问rails,我会在几个方法中重写finder并需要访问我班级内的数据库。在应用程序和类之间共享数据库连接的最佳方法是什么?或者,您是否建议将所有数据库工作推送到自己的类中,并且只建立连接?
以下是我在app.rb中的内容
require 'lib/myclass'
configure :production do
MysqlDB = Sequel.connect('mysql://user:password@host:port/db_name')
end
我想在lib / myclass.rb
中访问它class Myclass
def self.find_by_domain_and_stub(domain, stub)
# want to do a query here
end
end
我已经尝试了几件事,但似乎没有任何效果,甚至可以作为一个例子。
答案 0 :(得分:3)
假设您没有进行任何线程,只需将连接设置为全局变量。
require 'lib/myclass'
before do
$MysqlDB = Sequel.connect('mysql://user:password@host:port/db_name')
end
class Myclass
def self.find_by_domain_and_stub(domain, stub)
# use $MysqlDB here
end
end
最好检查连接超时设置,或明确断开与服务器的连接。如果您正在处理大量请求,则可能会在超时之前耗尽连接。
答案 1 :(得分:3)
require 'sequel'
DB = Sequel.connect('mysql://user:password@host:port/db_name')
require 'lib/myclass'
在这种情况下,最好使用常量而不是全局变量。