自定义守护进程与Rails 3

我正在尝试创建一个加载Rails环境的自定义守护程序。 我的环境如下:ruby-1.9.2-p180 rails 3.0.5

我做了以下事情:

– 安装守护进程gem

– 安装在这里的daemon_generator插件: https : //github.com/dougal/daemon_generator

-Generated守护进程:rails生成守护进程监听器

这一切都很好。 当我运行守护进程时,它可以工作。

但是,只要我尝试访问活动记录对象(例如尝试检索用户),它就会爆炸。

*** below you find the most recent exception thrown, this will be likely (but not certainly) the exception that made the application exit abnormally *** # *** below you find all exception objects found in memory, some of them may have been thrown in your application, others may just be in memory because they are standard exceptions *** # # # # # 

有关如何创建加载Rails 3.0.5的守护进程的任何想法?

我更喜欢滚动自己的rails守护程序控制器。 这是一个适用于大多数情况的简单示例:

脚本/守护

 #!/usr/bin/env ruby require 'rubygems' require 'daemons' ENV["APP_ROOT"] ||= File.expand_path("#{File.dirname(__FILE__)}/..") ENV["RAILS_ENV_PATH"] ||= "#{ENV["APP_ROOT"]}/config/environment.rb" script = "#{ENV["APP_ROOT"]}/daemons/#{ARGV[1]}" Daemons.run(script, dir_mode: :normal, dir: "#{ENV["APP_ROOT"]}/tmp/pids") 

守护进程/ your_daemon_script.rb

 require ENV["RAILS_ENV_PATH"] loop { ... your code ... } 

您可以使用以下命令控制您的守护程序:

 script/daemon run your_daemon_script.rb script/daemon start your_daemon_script.rb script/daemon stop your_daemon_script.rb 

这使我能够轻松添加新的守护进程,如果需要,我可以轻松地在每个脚本中加载rails。

查看https://github.com/dougal/daemon_generator/blob/master/lib/generators/daemon/templates/script.rb中的代码,看来它们按错误的顺序加载…

看看我的delayed_job守护进程脚本和config.ru,他们加载config / environment.rb(反过来加载application.rb并初始化应用程序)

因此,可能的修复方法是编辑生成的脚本并使其仅需要’config / environment.rb’

我试过这个:

  #!/usr/bin/env ruby # You might want to change this ENV["RAILS_ENV"] ||= "development" require File.dirname(__FILE__) + "/../config/environment" $running = true Signal.trap("TERM") do $running = false end while($running) do # Replace this with your code Rails.logger.auto_flushing = true o = Order.last Rails.logger.info "The latest order is #{o.id}" sleep 10 end 

它没有产生任何错误…(尝试了Rails 3.0.3和3.0.5)

尝试让daemon_generator工作时我遇到了很多问题。 我通过一起跳过daemon_generator并使用守护进程gem(v1.1.3)让我的守护进程工作。

在urserver_control.rb中(在root ruby​​ app目录中):

     #!/ usr / bin / env ruby
    需要'rubygems'
    要求'守护进程'
    要求'TweetMsg'

     Daemons.run( 'urserver.rb')

在urserver.rb中:

 #!/ usr / bin / env ruby
 require File.expand_path(File.join(File.dirname(__ FILE__),'config','environmen
 T'))
需要“rubygems”

   ---在这里插入你的代码---

您可以通过直接运行服务器测试ruby urserver.rbruby urserver_controller run然后一旦启动并停止控制器ruby urserver_control.rb {start | stop | run } ruby urserver_control.rb {start | stop | run }

我在登台服务器上运行守护程序时遇到问题(Rails 3.0.7,ruby 1.8.7,passenger 3.0.0)。 也不

需要File.dirname( FILE )+“/../../ config / application”Rails.application.require_environment!

也不

require File.dirname( FILE )+“/../ config / environment”

工作。

我通过在rails根目录中重新安装标准config.ru来修复它(我已经卸载以集成w乘客……现在不确定如何让守护进程和乘客一起工作……)