5

本番環境では、3 つのプロセスを実行する必要があります。これは私の procfile で、Foreman を使用してそれらを開始します。

web: bundle exec rails s Puma -p $PORT
queuing: bundle exec clockwork clock.rb
workers: bundle exec rake resque:workers

展開には Mina を使用しています。展開タスクの最後に Foreman を開始する適切な方法は何ですか? 現在、私は次のように始めています:

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 つのプロセスすべてが強制終了されないようにするにはどうすればよいでしょうか? プロセスがクラッシュしたときにプロセスを再起動するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

では、質問は 3 つです。

1)ターミナルからフォアマンプロセスを切り離したいと思います。そうすれば、サーバーから切断した後でも、展開プロセスが完了し、フォアマン プロセスが実行されます。nohupたとえば、これはアプリを起動し、すべてのログをserver.logファイルにパイプします:

nohup foreman start > server.log 2>&1 &

2)私の知る限り、職長はあなたにそれをさせません。おそらく、別のプロセス管理サービス (systemd、upstart など) を使用する必要があります。ありがたいことに、フォアマンを使用すると、構成をさまざまなプロセス管理形式に簡単にエクスポートできます ( http://ddollar.github.io/foreman/#EXPORTING )。

3) 繰り返しますが、おそらくプロセスを分離し、upstart、systemd などを介して個別に管理することをお勧めします。

于 2015-07-05T19:48:18.617 に答える