2011-12-07 6 views
0

私は、フォームの、2つのルビサーバスクリプト、powerupserver.rbとoutputserver.rbを持っている:開発でBluepillでRubyサーバスクリプトを実行するにはどうすればよいですか?

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 

私はそれらを実行するためにフォアマンを使用し、それは素晴らしい作品。今私はBluepillのデーモンとしてバックグラウンドで実行して監視しようとしています。 ForemanにはBluepill設定ファイル(.pillファイル)にエクスポートするオプションがあるため、私は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 

は(須藤bluepill状態)、私は以下を参照してください

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

これはおそらく上がっています(ただし、0のpidを持っていますが、確かに良くないと思われます)が、実行していない/実行していることがわかります。 Bluepillの知識を持つ人が私がここで間違っていることを理解するのに役立つでしょうか?事前にありがとうございました!

+0

ブルーフィルを使用しています。潜在的な問題:プロセスが自己デーモン化していますか?それは始めるのがかなり遅いですか?たとえば、ユニコーン(+レール)を30秒間起動する必要があります。そうしないとBluepillはpidを取得しません。 – d11wtq

答えて

0

Daemons ruby​​ gemを使ってスクリプトをデモンストレーションし、Bluepillを使ってそれらを監視しました。私はあなたが両方Bluepillだけを使用して行うことができます知っているが、私はそれを把握することができなかったと私のシステムは正常に動作していた。私はRails 3.0.3、Daemons 1.1.5、Bluepill 0.0.51を使用しています。最初にまずデーモンとBluepillがインストールされていることを確認してください。

これで、私のmyserver.rbというrubyサーバのスクリプトが、私のレールappのルートの中にあるとしましょう。デーモン化する方法デーモンを伝えるために、ルートフォルダ内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) 

オプションのハッシュについての詳細を学ぶためにデーモンのドキュメントをチェックしてください。 'sudo ruby​​ myserver_control.rb start'を使って、コマンドラインであなたのデーモンをあなたのrailsアプリケーションのルートフォルダの中から実行することができます。

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設定ファイル(myrailsapp.pillファイル)に置くことができるデーモンの起動コマンドです。次にBluepillを起動すると、監視対象のデーモンがあります。上記の例で参照されているすべてのフォルダが存在することを確認してください(例:pid)。

関連する問題