現在、rakeファイルを分割して整理します。このために、rake
フォルダーにassets
フォルダーを追加しました。このフォルダーには、タスクのグループごとに1つのrakeファイルが保持されています。
私はPHPから来ているので、Ruby/Rakeの非常に基本的な知識しかなく、ロード後に名前空間のデフォルトアクションを実行できませんファイル。
Rake :: Task ...
-中の文字列app:init
私のCLでエラーをスローします:
rake aborted! uninitialized constant TASK
これが名前空間/クラスです(これが正しいWordの場合)。
task :default => [ 'app:init' ]
namespace :app do
rake_dir = "#{Dir.pwd}/assets/rake/"
rake_files = FileList.new( "#{rake_dir}*" )
desc "Loads rake modules (Default action)"
task :init do
puts "\t Importing rake files for processing"
puts "\t loading..."
rake_files.each() { |rake|
puts "\t #{rake}"
require rake
# @link rubular.com
name = rake.split( rake_dir ).last.gsub( /.rb\z/, '' )
puts "\t #{name}"
#Rake :: Task[ "#{name}:default" ].invoke
}
end
end
前もって感謝します。
編集:少なくとも、プレーンなputs "file loaded"
それらのファイルの先頭にエコーされます。問題はのみであるようです:default
ロードされたrakeファイル内の名前空間のアクションがロードされていません。
目標が外部ファイルからrakeタスクをロードすることである場合は、次のように実行できます。まず、次のような<project>/lib/tasks/hello.rake
というファイルにrakeタスクがあるとします。
desc "Say hello"
task :hello do
puts "Hello World!"
end
次に、<project>
ディレクトリに単純なRakefile
を作成して、次のようにロードします。
Dir.glob('lib/tasks/*.rake').each { |r| load r}
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
もちろん、これはrake
拡張子で終わるすべてのファイルをロードします。次のようにhello.rake
をロードするだけです。
load './lib/tasks/hello.rake'
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
ロードされたすべてのタスクを表示するには、rake -T
を使用します。 Railsアプリケーションで採用されている標準的なアプローチであるため、私はlib/tasks
を使用していることに注意してください。assets
または好きなものを使用できますが、lib/tasks
非Railsプロジェクトでも、名前空間に基づいてタスクファイルを分離する傾向があります。
タスクをrakelib/
フォルダrake
がデフォルトでロードするか、特定のフォルダをRakefile
に追加します。
Rake.add_rakelib 'lib/tasks'
@splattaelが言ったように、いつでもRake.add_rakelib 'tasks'
を使用できます。知っておくべきことの1つは、「tasks」ディレクトリ内のファイルには「.rb」ではなく「.rake」の拡張子が必要です。そうでない場合、rakeはそれをロードしません。
サンプルファイル:
上記のすべてを実行したら、rake -T
を使用してジョブをチェックし、rakeがタスクを正常にロードしたかどうかを確認します。