Последние несколько недель я изучаю 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.
Кто-нибудь знает, как это сделать правильно, подключившись к базе данных?