与Sinatra应用程序中包含的类共享数据库连接

时间:2010-04-13 22:01:11

标签: mysql ruby database sinatra sequel

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

我已经尝试了几件事,但似乎没有任何效果,甚至可以作为一个例子。

2 个答案:

答案 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)

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

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

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

相关问题