我正在开发一个模块化的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中。
答案 0 :(得分:2)
如果您使用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,你可以在你的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
的顶部。