如何在unicorn启动之前设置我的数据库并进行4次? (因为我有4名工人)

时间:2012-10-11 06:40:45

标签: ruby sinatra datamapper unicorn

我正在开发一个模块化的Sinatra应用程序。我用独角兽。该应用程序需要一些db等初始设置,我该怎么做?

my config.ru:

require './main.rb'

disable :run #disable internal webserver

run App.new

我的Procfile:

web: unicorn -p 8080 -c ./unicorn.rb

我的unicorn.rb:

worker_processes 4
timeout 30

设置发生在main.rb中。

2 个答案:

答案 0 :(得分:2)

的ActiveRecord

如果您使用ActiveRecord作为您选择的ORM,您可以将这样的内容添加到您的Unicorn before_fork挂钩中。这将关闭与数据库的任何现有连接。

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
   ActiveRecord::Base.connection.disconnect!
end

并将此添加到after_fork挂钩。这将在每个独角兽叉之后建立新的连接。

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

的DataMapper

如果你使用DataMapper,你可以在你的before_fork钩子上添加这样的东西。这次你将使用DataObjects来处置连接 - DataObjects是一个用更标准的接口重写现有Ruby数据库驱动程序的gem。 DataObjects在内部使用DataMapper来管理与数据库的连接。处理完连接后DataMapper将在需要时重新连接。

before_fork do |server, worker|
  DataObjects::Pooling.pools.each do |pool|
    pool.dispose
  end
end

答案 1 :(得分:1)

理想情况下,在应用程序之外,作为在启动独角兽之前运行的东西。

您可以将main.rb的设置部分放在unicorn.rb的顶部。