我使用Sinatra + Sequeltesting了使用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
在我的testing环境中开始使用Phusion Passenger之前,一切正常。 现在我在nginx error.log中有exception:
Sequel :: DatabaseError – RuntimeError:连接不能在分叉进程中重用。
将数据库连接例程放置在rackup文件config.ru中是正确的,还是以不同的方式做到这一点? 如果第一个变体比如何从应用程序代码中调用连接正确?
PS:我知道我可以做passenger_spawn_method conservative
并继续在应用程序代码中打开连接,但由于速度和资源使用问题,这不是我要找的方式。
这个问题记录在Phusion乘客手册的附录C.3中。 通常的方法是钩入post-fork回调并在那里重新建立连接。
对不起,我没有在Passenger上检查它的能力,我不知道它会工作,但是在配置块中连接是更正确的:
configure do Sequel.connect(ENV['DATABASE_URL'] || 'sqlite://blog.db') end
例如形式为Scanty – 另一个伟大的Sinatra + Sequel应用程序。