2

我正在将 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

我已经尝试了几件事,但似乎没有什么能很好地作为一个例子。

4

2 回答 2

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

检查连接超时设置或显式断开与服务器的连接可能是明智之举。如果您正在处理大量请求,您可能会在它们超时之前用完连接。

于 2010-04-14T11:38:40.430 回答
3

Tim Rosenblatt 的回答将在每次请求时重新连接。最好在您的 Sinatra 应用程序中执行以下操作:

require 'sequel'
DB = Sequel.connect('mysql://user:password@host:port/db_name')
require 'lib/myclass'

在这种情况下,最好使用常量而不是全局变量。

于 2010-04-16T15:45:31.013 回答