【发布时间】:2012-02-10 18:36:30
【问题描述】:
我有使用 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
在我开始在我的测试环境中使用 Phusion Passenger 之前,一切都很好。现在我在 nginx error.log 中有异常:
Sequel::DatabaseError - RuntimeError: 连接不能被重用 在分叉的过程中。
将数据库连接例程放置到机架文件 config.ru 是否正确,或者最好以不同的方式进行?如果第一个变体比如何从应用程序代码中正确调用连接?
P.S.:我知道我可以 passenger_spawn_method conservative 并继续在应用代码中打开连接,但这不是我想要的方式,因为它存在速度和资源使用问题。
【问题讨论】:
-
为了回答我自己的问题,我在RubyForge 上找到了一些相关信息。我必须将
DB.disconnect放在机架文件config.ru的最底部。但我仍然在内心深处认为这不是总体正确的方法。任何指导如何解决乘客将如何管理应用程序将不胜感激。 -
Passenger 不提供可以使用的前叉钩子,因此如果您要预加载应用程序,建议在 config.ru 底部调用 DB.disconnect。
标签: ruby nginx sinatra passenger sequel