【问题标题】:Rails Invoking a rake task dependant on :environment task, from a initializer fileRails 从初始化文件调用依赖于 :environment 任务的 rake 任务
【发布时间】:2011-02-05 15:02:47
【问题描述】:

我正在使用 rufus 调度程序来替换部署系统中的 cron 作业,并在应用程序在部署时加载时启动这些作业。

现在我将这个 scheduler.rb 放在应用程序根目录的 config/initializers 目录中。

scheduler.rb文件内容如下:

require 'rufus/scheduler'
require 'rubygems'
require 'rake'

load File.join(RAILS_ROOT,'lib','tasks','tempfile.rake')

temp_files_cleaning_scheduler = Rufus::Scheduler.start_new

temp_files_cleaning_scheduler.cron '*/1 * * * *' do
    Rake::Task["tempfile:delete_all"].reenable
    Rake::Task["tempfile:delete_all"].invoke
end

现在当我启动应用程序服务器时,我收到如下错误消息:

scheduler caught exception :
Don't know how to build task 'environment'
/home/karthik/.rvm/gems/jruby-1.5.2/gems/rake-0.8.7/lib/rake.rb:1728:in `[]'
/home/karthik/.rvm/gems/jruby-1.5.2/gems/rake-0.8.7/lib/rake.rb:605:in `invoke_prerequisites'

其中“环境”是我正在调用的任务“tempfile:delete_all”的依赖任务。这个 :environment 任务在 railties/lib/tasks/misc.rake 中定义。

我不想通过硬编码路径来加载这个 misc.file。 有没有更简洁的方法来解决这个问题?

谢谢。

【问题讨论】:

  • 我用过rufus,没问题,一直有问题。希望我能帮上忙。
  • 去接受一个mofukin的答案,有人会帮助你的兄弟'
  • 但是说真的,我需要一些声誉,所以你最好在这里帮助每个人,并在我们开始考虑你的问题之前点击检查至少几个答案。
  • 只要你知道这很严重,我就是一个想追根究底的人。
  • 我不知道这个接受率游戏。特别感谢你帮助我知道该怎么做:)

标签: ruby-on-rails ruby-on-rails-3 jrubyonrails rufus-scheduler


【解决方案1】:

听起来您需要更多未加载的 Rakefile 中的定义,可能是因为“lib/tasks/tempfile.rake”中没有任何 require 语句。

我假设这可以从命令行运行,如果是这样,您有两个选择:

  1. 加载您应用的主 Rakefile,其中包含所有必要的内容:

    load File.join(RAILS_ROOT,'lib','tasks','tempfile.rake')

  2. 就像从控制台一样调用它:

    system('rake tempfile:delete_all')

希望有帮助!

【讨论】:

    猜你喜欢
    • 2011-10-11
    • 2012-05-04
    • 1970-01-01
    • 2010-10-20
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多