私は常にbluepillを使用して単純な Ruby スクリプトをデーモン化してきました。ただし今回は、Rails 環境もロードするスクリプトがあるので、Rails アプリとそれぞれのモデルのデータベース接続にアクセスできます。私が使用する bluepill 構成は、私が通常行っているものと何ら変わりはありません。
Bluepill.application("myapp", :foreground => true, :log_file => "/tmp/bluepill.log") do |app|
app.process("myapp_process") do |process|
process.start_command = "/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby /media/apps/myapp/current/lib/async/myscript.rb"
process.pid_file = "/media/apps/myapp/current/tmp/pids/myscript.pid"
process.daemonize = true
process.stdout = "/var/log/myapp/media.log"
process.stderr = "/var/log/myapp/media_error.log"
process.working_dir = "/tmp"
process.stop_command = "kill -QUIT {{PID}}"
process.start_grace_time = 15.seconds
end
end
主な問題は次のエラーです。
Failed to signal process 16096 with code 0: No such process
これを使用してRails環境をロードしない場合:
require File.expand_path("/media/apps/myapp/current/config/environment")
これは、私の他のスクリプトの束と同じように機能します。ただし、Rails 環境をロードするスクリプトをデーモン化しようとするのはこれが初めてです。ruby gem Daemons を使用してこれを機能させることができることはわかっていますが、それでは監視が行われず、bluepill は両方を非常にうまく行うことができます。
ここで明らかな何かが欠けていますか?