ruby-on-rails – 如何使用bluepill对Rails脚本进行Daemonize
发布时间:2020-12-17 03:48:19 所属栏目:百科 来源:网络整理
导读:我总是成功地使用bluepill来守护简单的 Ruby脚本.但是这一次,我有一个脚本,它也加载了一个Rails环境,所以我可以访问Rails应用程序及其各自模型的数据库连接.我使用的bluepill配置与我通常做的没什么不同: Bluepill.application("myapp",:foreground = true,
我总是成功地使用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能够做得非常好. 我错过了一些明显的东西吗? 解决方法
信号代码0用于终止查询以确定守护程序是否接受信号. Bluepill源显示这是在产生后经常完成的,以检查守护进程是否活着并且运行良好.
由于该过程不再存在,因此在加载环境时,ruby很可能会死亡. 你没有显示你的脚本.我猜它从命令行运行正常但是没有守护进程.一个可能的解释是,你的shell环境中有一些东西在Bluepill进程中缺失了.另一种可能性是访问交互式shell具有的资源,但无头守护程序进程没有. 这是一个猜测:对于你给予工作的要求,我相信必须设置RAILS_ENV环境变量.你在做吗?请参阅例如this note.也许最好使用启动脚本加载.见for example the Rails initialization description. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |