使用续集和美洲狮创建与postgresql数据库的连接

时间:2014-02-28 13:09:18

标签: ruby postgresql sequel puma rubinius

过去几周我一直在学习Ruby,我必须说要掌握一些东西并不容易。

这导致我提出这个问题,我正在尝试设置一个项目,该项目使用Rubinius作为ruby引擎,puma作为网络服务器(因为Puma说它最好与Rubinius合作,因为他们的并发实现),PostgreSQL作为数据库,sequel作为数据库的工具包。

我正在努力的是建立数据库连接。实际上,我是在config.ru

中进行的
require 'rubygems'
require 'bundler/setup'
require 'uri'
require 'yaml'
require 'erb'


Bundler.require :default, ENV['RACK_ENV']

DATABASE.disconnect if defined?(DATABASE)

if ENV['DATABASE_URL']
  db_config = URI.parse ENV['DATABASE_URL']
else
  #noinspection RubyResolve
  db_config = YAML.load(ERB.new(File.read('config/database.yml')).result)[ENV['RACK_ENV']]
end

DATABASE = Sequel.connect db_config

require File.expand_path('../application/api', __FILE__)

run APP::API

但是我被告知,如果我想要并发而不是共享连接,那么它不是最佳选择。如果我使用的是Unicorn,我会在before_fork中进行,但是Puma没有这样的功能。

虽然它确实提供on_worker_boot,但它对Sequel没用,因为如果我预加载应用程序,Sequel需要数据库连接才能创建我的模型(class SomeClass < Sequel::Model)。

我现在有点困惑,我不确定从这一点开始。我试图在这个问题上找到一些指南或一些好的做法,但我发现的唯一的事情是使用ActiveRecord。

有人知道如何正确地执行此操作,连接到数据库吗?

1 个答案:

答案 0 :(得分:1)

如果你没有设置puma来分叉和预加载应用程序(-w--preload标志),你不需要做任何事情。如果您已将puma设置为fork和preload,则在加载模型类之后,请调用DATABASE.disconnect。您可能还想游说美洲狮开发者在独角兽中添加类似于before_fork的钩子。