37

現在、rake ファイルを分割して整理しようとしています。このために、タスクのグループごとに 1 つの rake ファイルを保持するrakeフォルダーをディレクトリに追加しました。assets

私は PHP から来たので、Ruby/Rake のごく基本的な知識しかなく、ファイルをロードした後に名前空間のデフォルト アクションを実行できません。

Rake :: Task ...内部でコメントアウトされた -stringはapp:init、CL でエラーをスローします。

rake aborted! 
uninitialized constant TASK

これが名前空間/クラスです (これが正しい言葉である場合)。

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"これらのファイルの先頭にあるプレーンがエコーされるため、ファイルがロードされることを確認できます。問題は、ロードされた rake ファイルの名前空間のアクションがロードされていないことだけのようです。:default

4

3 に答える 3

64

デフォルトrakelib/で読み込まれるフォルダーにタスクを配置するか、特定のフォルダーをviaに追加することができます。rakeRakefile

Rake.add_rakelib 'lib/tasks'
于 2015-02-06T09:05:58.293 に答える
40

目標が外部ファイルから rake タスクをロードすることである場合、次のように実行できます。<project>/lib/tasks/hello.rakeまず、次のような名前のファイルに rake タスクがあるとします。

desc "Say hello"
task :hello do 
  puts "Hello World!"
end

Rakefile次に、ディレクトリに単純なものを作成して、次の<project>ようにロードできます。

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 -Tlib/tasksこれは、Rails アプリケーションで採用されている標準的なアプローチであるため、私が使用したことに注意してください。Rails以外のプロジェクトでもassets好みますが、好きなものを使用できます。lib/tasksまた、名前空間に基づいてタスク ファイルを分ける傾向もあります。

于 2013-05-27T22:35:37.293 に答える
5

Rake.add_rakelib 'tasks'@splattaelが言ったように、いつでも使用できます。知っておく必要があることの 1 つは、'tasks' ディレクトリ内のファイルは、'.rb' ではなく '.rake' の拡張子を持つ必要があるということです。

サンプルファイル:

上記のすべてを実行したら、 を使用rake -Tしてジョブをチェックし、rake がタスクを正常にロードしたかどうかを確認します。

于 2016-01-04T10:15:36.517 に答える