0

我正在使用 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。有没有更清洁的方法来解决这个问题?

谢谢。

4

1 回答 1

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-02-05T07:02:47.100 回答