2

Railsアプリケーションの一部を独自のsinatraアプリケーションに変換しています。それにはやるべきいくつかの大変な仕事があり、app.rbで百万の助けを得るのではなく、私はそれのいくつかをクラスに分けました。Railsにアクセスできないので、ファインダーをいくつかのメソッドに書き直していて、クラス内のデータベースにアクセスする必要があります。アプリケーションとクラスの間でデータベース接続を共有するための最良の方法は何ですか?または、すべてのデータベース作業を独自のクラスにプッシュし、そこで接続のみを確立することをお勧めしますか?

これが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 に答える