Rails依存するレーキタスクを呼び出す:環境タスク、初期化ファイルから
-
29-10-2019 - |
質問
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つのオプションがあります。
アプリのメインRakeFileをロードします。これには、必要なものがすべて含まれています。
load File.join(RAILS_ROOT,'lib','tasks','tempfile.rake')
まるでコンソールからのように呼び出すだけです:
system('rake tempfile:delete_all')
それが役立つことを願っています!
所属していません StackOverflow