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

おそらく「lib/tasks / tempfile.rake」にステートメントが含まれていないために、ロードされていないRakefilesにあるより多くの定義が必要なようですrequire

これはコマンドラインから機能すると思います。機能する場合は、次の2つのオプションがあります。

  1. アプリのメインのRakefileをロードします。これには、必要なものがすべて含まれています。

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

  2. コンソールからのように呼び出すだけです。

    system('rake tempfile:delete_all')

お役に立てば幸いです。

于 2011-02-05T07:02:47.100 に答える