【问题标题】:Running code after Rails is done loading?Rails 加载完成后运行代码?
【发布时间】:2012-06-13 21:45:03
【问题描述】:

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

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

我咨询了http://guides.rubyonrails.org/initialization.html,似乎也没有明确的位置存放那种代码。

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 另外,如果有问题的代码必须绝对最后执行,您可以创建一个名为zzz.rb 的初始化程序,或者按字母顺序排在最后的一些初始化程序,这样 Rails 就会最后执行它。或者 _me_first.rb 初始化器可以放在第一位。
      【解决方案3】:

      你真的有两个选择

      1) 将其添加到初始化程序目录中,这样就可以了。

      2) 将它添加到 application.rb 的最后,这不太干净,但此时它会准备好初始化程序之类的东西;p 所以如果 1) 由于 AR 问题而失败,请执行 2)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        • 2020-07-04
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多