Как я могу получить и запустить сценарии сервера ruby ​​с Bluepill? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть два сценария сервера ruby, powerupserver.rb и outputserver.rb, вида:

require '/Library/WebServer/sample_app/config/environment'
# more requires

@server = TCPServer.open(port_number)                          
loop do                                                 
  Thread.start(@server.accept) do |sock| 
    # do stuff
  end
end

В разработке я использую Foreman для их запуска, и это прекрасно работает. Сейчас я пытаюсь запускать и отслеживать их в фоновом режиме как демонов с Bluepill. Я выбрал Bluepill главным образом потому, что у Foreman есть опция экспорта в файл конфигурации Bluepill (файл .pill). Поэтому я сделал это, а затем изменил файл .pill, чтобы получить следующее:

Bluepill.application("sample_app", :foreground => false, :log_file => "/var/bluepill/log/bluepill.log") do |app|

  app.process("powerupserver") do |process|
    process.start_command = "ruby powerupserver.rb"
    process.working_dir = "/Library/WebServer/sample_app"
    process.pid_file = "/var/bluepill/pids/powerupserver-1.pid"
    process.daemonize = true
    process.stdout = process.stderr = "/var/bluepill/log/powerupserver-1.log"

    process.start_grace_time = 3.seconds
    process.stop_grace_time = 5.seconds
    process.restart_grace_time = 8.seconds
    process.stop_signals = [:quit, 30.seconds, :term, 5.seconds, :kill]

    process.checks :cpu_usage, :every => 10.seconds, :below => 5, :times => 3
    process.checks :mem_usage, :every => 10.seconds, :below => 100.megabytes, :times => [3,5]
    process.checks :flapping, :times => 2, :within => 30.seconds, :retry_in => 7.seconds

  end

  # more lines here mimicking above, but for server script 'outputserver.rb'
end

Когда я загружаю эту .pill и проверяю статус (статус sudo bluepill), я вижу:

$ sudo bluepill status
powerupserver(pid:0): up
outputserver(pid:0): up

Так что он предположительно работает (хотя с pid = 0? Что, конечно, не кажется хорошим), но я вижу, что они не работают / делают то, что должны делать. Может ли кто-нибудь со знанием Bluepill помочь мне понять, что я здесь делаю неправильно? Огромное спасибо заранее!

1 Ответ

0 голосов
/ 25 сентября 2012

В итоге я использовал рубиновый гем Daemons для демонизации моих скриптов и использовал Bluepill для их мониторинга. Я знаю, что вы можете сделать оба, используя только Bluepill, но я не мог понять это в то время, и моя система работала просто отлично. Я использую Rails 3.0.3, Daemons 1.1.5 и Bluepill 0.0.51. Итак, обо всем по порядку, убедитесь, что у вас установлены Daemons и Bluepill.

Допустим, у нас есть myserver.rb, скрипт сервера ruby, который находится в корне моего приложения rails. Чтобы демонизировать его с помощью демонов, создайте myserver_control.rb в корневой папке, чтобы сообщить демонам, как демонизировать:

# myserver_control.rb
require 'rubygems'
require 'daemons'

@options = {
    :dir_mode => :normal,
    :dir => '/Library/WebServer/myrailsapp/pids',
    :multiple => true,
    :backtrace => true,
    :monitor => false,
    :log_dir => '/Library/WebServer/myrailsapp/log',
    :log_output => true
}

Daemons.run('myserver.rb', @options)

Ознакомьтесь с документацией Daemon, чтобы узнать больше о хэше опций. Теперь вы можете запустить своего демона из корневой папки приложения rails в командной строке, используя команду sudo ruby ​​myserver_control.rb start. Это команда запуска демона, которую вы можете поместить в файл конфигурации Bluepill (файл myrailsapp.pill) следующим образом:

Bluepill.application("myrailsapp", :foreground => false, :log_file => "/Library/WebServer/myrailsapp/log/bluepill.log") do |app|

  app.process("myserver") do |process|

    process.start_command = "sudo ruby myserver_control.rb start"
    process.stop_command = "sudo ruby myserver_control.rb stop"
    process.restart_command = "sudo ruby myserver_control.rb restart"

    process.pid_file = "/Library/WebServer/myrailsapp/pids/myserver.rb0.pid"

    process.working_dir = "/Library/WebServer/myrailsapp"

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

  end
end

Обязательно прочитайте документацию по Bluepill, чтобы увидеть все ваши многочисленные варианты. Затем, когда вы запускаете Bluepill, у вас есть контролируемый демон. Убедитесь, что все папки, указанные в приведенных выше примерах, существуют (например, pids).

...