5 Stimmen

Überwachung von Bundle Exec unicorn_rails mit bluepill

Da unicorn_rails sich über verschiedene Gem-Versionen beschwert hat, sind wir dazu übergegangen, bundle exec unicorn_rails... in unseren bluepill-Dateien auszuführen. Diese Änderung löste dieses spezielle Problem und die Dinge starten und stoppen, aber wenn wir sudo bluepill status versuchen, erhalten wir jetzt

unicorn(pix: XXXXXX): nicht überwacht

Es sieht so aus, als würde bluepill die Einhorn-Prozesse nicht mehr überwachen. Es startet die Kindprozesse neu, wenn ich sie stoppe, aber nicht den Elternprozess.

Ich habe mich umgesehen, kann aber nicht viel zu diesem Thema finden und hoffte, dass jemand etwas Licht in die Sache bringen kann. Die bluepill Konfigurationsdatei lautet

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

3voto

blt04 Punkte 692

Wenn Sie bundle exec wird eine Umgebung eingerichtet und die unicorn_rails Prozess. Bluepill überwacht am Ende das Original bundle exec Prozess anstelle von unicorn, weshalb Sie unmonitored sehen.

Ich richte meine Bundler-Umgebung direkt in bluepill ein und führe dann unicorn_rails direkt:

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

(Hinweis: Ich habe einen Teil der obigen Konfigurationsdatei aus Gründen der Übersichtlichkeit weggelassen. Ihre Konfigurationsdatei sieht gut aus, fügen Sie einfach die app.environment und das Entfernen von Material über bundle exec von Ihrem Startbefehl).

Dies richtet die Umgebung in bluepill ein, indem es die Bundler-Umgebungsvariablen mit Backticks erfasst, die zurückgegebene Zeichenkette in einen Hash umwandelt und diesen an app.environment .

3voto

d11wtq Punkte 34050

Ich weiß, diese Frage ist alt, aber ich stehe seit Wochen vor diesem Problem. Mein Verdacht wurde geweckt, als ich feststellte, dass "bluepill quit", gefolgt von einem erneuten Laden der Pille, während unicorn lief, bluepill erlaubte, den Prozess als "up" zu betrachten.

Die Antwort von @blt04 hat nicht geholfen. Heute bin ich zu einer Erkenntnis gekommen. Meine Gnadenstartzeit von 8 Sekunden war nicht genug, denn ich hatte preload_app true in meiner Unicorn-Konfiguration... und meine App (Rails) braucht 12 Sekunden zum Laden, nicht 8.

Die Erhöhung der Startzeit auf 30 Sekunden (weit mehr als nötig) löste das Problem. Bluepill sagt nur 30 Sekunden lang "Start" und geht dann korrekt auf "up". Das Unicorn startet und läuft wie gewohnt.

Die Neustartzeit sollte länger sein, als es dauert, bis Rails startet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X