4

私はSinatra+Sequelを使用してrubyで書かれたテストアプリを持っています。

config.ru:

require './main'

run Sinatra::Application

コード例:

require 'sinatra'
require 'haml'
require 'sequel'

DB=Sequel.connect('oracle://test:test@test')

class Tarification < Sequel::Model(DB[:test_table]) 

end

get '/' do
  haml :index
end

テスト環境でPhusionPassengerを使い始めるまでは、すべて問題ありませんでした。nginx error.logに例外があります:

Sequel :: DatabaseError-RuntimeError:接続はフォークされたプロセスで再利用できません。

DB接続ルーチンをラックアップファイルconfig.ruに配置するのは正しいことですか、それとも別の方法で行う方が良いですか?アプリケーションコードから接続を正しく呼び出す方法よりも最初のバリアントの場合はどうなりますか?

PS:アプリコードで接続を開いて続行できることは知っていますがpassenger_spawn_method conservative、速度とリソース使用量の問題があるため、私が探している方法ではありません。

4

2 に答える 2

2

この問題は、PhusionPassengerマニュアルの付録C.3に記載されています。通常の方法は、フォーク後のコールバックにフックして、そこで接続を再確立することです。

于 2012-03-11T22:19:14.213 に答える
1

申し訳ありませんが、Passengerで確認する機能がなく、機能するかどうかはわかりませんが、configureブロックで接続する方が正しいです。

configure do
  Sequel.connect(ENV['DATABASE_URL'] || 'sqlite://blog.db')
end

例はフォームScantyです—もう1つの優れたSinatra+Sequelアプリケーションです。

于 2012-03-11T22:14:31.060 に答える