在Rails完成加载后运行代码?

时间:2012-06-10 21:18:55

标签: ruby-on-rails ruby-on-rails-3 delayed-job

我有一个需要每分钟执行一次的周期性任务(使用delayed_job)。我希望Rails在加载完成后自动将其排队,如果系统中还没有这样的任务。

在整个Rails启动流程结束时运行一些代码对我来说有什么好处?有人建议使用config / environments / development.rb(或其他环境),但是当我从那里排队作业时,delayed_job会给我ActiveRecord问题。

我咨询了http://guides.rubyonrails.org/initialization.html,并且似乎没有明确的位置来处理这类代码。

这种部署后设置是否可能在我的应用程序代码外部完成,可能是通过rake或其他方式?有什么建议吗?

谢谢!

3 个答案:

答案 0 :(得分:8)

关于http://guides.rubyonrails.org/initialization.html,抱歉,我们正在努力重写它。对于您的问题,我会尝试使用您的application.rb中的config.after_initialize

def after_initialize(&block)
  ActiveSupport.on_load(:after_initialize, :yield => true, &block)
end

答案 1 :(得分:3)

将您的代码添加到初始化程序目录中。

http://guides.rubyonrails.org/configuring.html#using-initializer-files

答案 2 :(得分:2)

你真的有两个选择

1)将它添加到初始化程序目录中,这应该没问题。

2)在application.rb的最后添加它,这不太干净但是此时会有初始化器准备就绪;如果1)因为AR问题而失败那么做2)