Правильное место для подключения БД Sequel при работе с Phusion Passenger с помощью nginx - PullRequest
4 голосов
/ 15 января 2012

У меня есть тестовое приложение, написанное на ruby ​​с использованием Sinatra + Sequel.

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

Все было вседо тех пор, пока я не начал использовать Phusion Passenger в моей тестовой среде.Теперь у меня есть исключение в nginx error.log:

Sequel :: DatabaseError - RuntimeError: Невозможно повторно использовать соединение в разветвленном процессе.

Правильновещь, чтобы разместить подпрограмму подключения БД к файлу конфигурации config.ru или лучше это сделать по-другому?Если первый вариант, чем как сделать вызов соединения правильно из кода приложения?

PS: я знаю, что могу сделать passenger_spawn_method conservative и продолжить открытие соединения в коде приложения, но я не такищет из-за проблем со скоростью и использованием ресурсов.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Эта проблема описана в Приложении C.3 руководства Phusion Passenger. Обычный метод - подключиться к обратному вызову после разветвления и восстановить соединение там.

1 голос
/ 12 марта 2012

Извините, у меня нет возможности проверить это на Пассажире, и я не знаю, будет ли это работать, но правильнее подключиться в блоке настройки:

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

Пример - форма Scanty - еще одно замечательное приложение Sinatra + Sequel.

...