生産目的では、3つのプロセスを実行する必要があります。これは私のprocfileです。私はForemanを使って起動します:
web: bundle exec rails s Puma -p $PORT
queuing: bundle exec clockwork clock.rb
workers: bundle exec rake resque:workers
デプロイメントのために私はMinaを使用しています。デプロイメントタスクの最後にフォアマンを開始する適切な方法は何ですか?現在、私はこのように始めています:
desc "Deploys the current version to the server."
task :deploy => :environment do
deploy do
invoke :"git:clone"
invoke :"deploy:link_shared_paths"
invoke :"bundle:install"
invoke :"rails:db_migrate"
invoke :"rails:assets_precompile"
to :launch do
queue "touch #{deploy_to}/tmp/restart.txt"
queue "bundle exec foreman start"
end
end
end
... "mina deploy"コマンドが正常に終了することはないので、ローカルコンソールはこれらのプロセスが何をしていても出力を開始するので、適切な方法はありません。
質問2:これらの3つのプロセスそれぞれのログを別々のファイルで個別に初期化するにはどうすればよいですか?
そして、これらの3つのプロセスのいずれかがクラッシュした場合、これら3つのプロセスをすべて終了させるのを防ぐにはどうすればよいですか?プロセスがクラッシュしたときに再起動させるにはどうすればよいですか?
ありがとう!
回答:
回答№1は0OK、これは3つの質問です。
1)私はあなたが監督のプロセスを端末から切り離したいと思う。これにより、サーバーから切断した後でも、展開プロセスが完了し、監督プロセスが実行されます。 nohup
それには最適ですこれはあなたのアプリを起動し、すべてのログを server.log
ファイル:
nohup foreman start > server.log 2>&1 &
2)AFAIK、監督はあなたにそれをさせません。 他のプロセス管理サービス(たとえば、systemd、upstart)を使用することをお勧めします。ありがたいことに、担当者は設定を異なるプロセス管理フォーマットに簡単にエクスポートできます(http://ddollar.github.io/foreman/#EXPORTING)。
3)やはり、upstart、systemdなどでプロセスを分けて別々に管理したいと思うでしょう。