2

私はモジュラーSinatraアプリを開発しています。ユニコーンを使っています。アプリにはdbなどの初期設定が必要ですが、どこでそれを行うことができますか?

私のconfig.ru:

require './main.rb'

disable :run #disable internal webserver

run App.new

私のProcfile:

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

私のユニコーン.rb:

worker_processes 4
timeout 30

セットアップはmain.rbのどこかで行われます。

4

2 に答える 2

2

アクティブレコード

選択した ORM としてActiveRecordを使用する場合、次のようなものを 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
于 2014-06-11T07:07:12.640 に答える
1

理想的には、アプリケーションの外部で、ユニコーンが開始される前に実行されるものとして。

のセットアップ部分をmain.rbの上部に配置できる可能性がありますunicorn.rb

于 2012-10-11T06:46:10.237 に答える