質問

Rufusスケジューラを使用して、展開システムのCronジョブを置き換え、アプリケーションが展開にロードされたときにそれらのジョブをキックスタートさせます。

これで、このスケジュールをアプリケーションルートディレクトリから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」の依存タスクです。これ:環境タスクは、Railties/lib/tasks/misc.rakeで定義されています。

パスをハードコーディングすることで、このMISC.FILEをロードしたくありません。 この問題を解決するためのよりクリーンな方法はありますか?

ありがとう。

役に立ちましたか?

解決

おそらく「lib/tasks/tempfile.rake」がないため、読み込まれていないrakefilesにあるより多くの定義が必要なように聞こえます。 require その中の声明。

これはコマンドラインから機能すると思いますが、もしそうなら、2つのオプションがあります。

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

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

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

    system('rake tempfile:delete_all')

それが役立つことを願っています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top