5

unicorn_rails がさまざまな gem バージョンについて不平を言っているため、bluepill ファイルで bundle exec unicorn_rails... を実行するようにしました。この変更により、その特定の問題が解決され、物事が開始および停止しましたが、sudo bluepill ステータスを試すと、現在取得しています

ユニコーン(pix: XXXXXX): 無監視

bluepill は現在、ユニコーン プロセスを監視していないようです。子プロセスを停止すると再起動しますが、親プロセスは再起動しません。

私は周りを検索しましたが、この問題について多くを見つけることができず、誰かがそれに光を当ててくれることを望んでいました. ブルーピルの設定ファイルは

app_dir = "/opt/local/share/httpd/apps/xyz"
Bluepill.application('xyz', :log_file => "#{app_dir}/current/log/bluepill.log") do |app|
  app.process('unicorn') do |process|
    process.pid_file    = "#{app_dir}/shared/pids/unicorn.pid"
    process.working_dir = "#{app_dir}/current"

    process.stdout = process.stderr = "#{app_dir}/shared/log/unicorn.err.log"
    process.start_command = "bundle exec unicorn_rails -D -c #{app_dir}/current/config/environments/production/unicorn.rb -E production"
    process.stop_command = "kill -QUIT {{PID}}"
    process.restart_command = "kill -USR2 {{PID}}"

    process.start_grace_time = 8.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 13.seconds

    process.monitor_children do |child_process|
      child_process.stop_command = "kill -QUIT {{PID}}"

      child_process.checks :mem_usage, :every => 10.seconds, :below => 200.megabytes, :times => [3,5]
      child_process.checks :cpu_usage, :every => 10.seconds, :below => 50, :times => [3,5]
    end
  end

end
4

2 に答える 2

3

この質問が古いことは知っていますが、私はこの問題に何週間も直面しています。「bluepill が終了」し、ユニコーンの実行中にピルをリロードすると、bluepill がプロセスを「up」と見なすことができることに気付いたとき、私の疑念が喚起されました。

@blt04の答えは役に立ちませんでした。今日、私はあることに気づきました。猶予開始時間の 8 秒では十分ではありませんでした。これはpreload_app true、ユニコーンの設定があったためです...そして、アプリ (Rails) の読み込みには 8 秒ではなく 12 秒かかります。

開始時間を 30 秒 (必要以上に大幅に) に上げると、問題は解決しました。Bluepill は 30 秒間「開始中」と言ってから、正しく「開始」します。Unicorn が起動し、通常どおり実行されます。

再起動時間は、Rails が起動するよりも長くする必要があります。

于 2011-09-16T11:35:28.200 に答える
3

を実行するbundle execと、環境がセットアップされ、unicorn_railsプロセスがフォークされます。Bluepillbundle execはユニコーンではなく元のプロセスを監視することになるため、監視されていないことがわかります。

bluepill でバンドラー環境を直接セットアップし、unicorn_rails直接実行します。

Bluepill.application('xyz') do |app|
  app.environment = `env -i BUNDLE_GEMFILE=#{app_dir}/Gemfile bundle exec env`.lines.inject({}) do |env_hash,l|
    kv = l.chomp.split('=',2)
    env_hash[kv[0] = kv[1]
    env_hash
  end

  app.process('unicorn') do |process|
    process.start_command = "unicorn_rails -D -c #{app_dir}/current/config/environments/production/unicorn.rb -E production"
  end
end

(注:わかりやすくするために、上記の構成ファイルの一部を省略しました。構成ファイルは適切に見えます。上記のものを追加して、開始コマンドからapp.environment削除してみてください。)bundle exec

これにより、バックティックを使用してバンドラー環境変数を取得し、返された文字列をハッシュに解析して に割り当てることで、bluepill に環境が設定されますapp.environment

于 2011-08-18T15:42:34.960 に答える