Подтвердить что ты не робот

Загружать файлы рейка и запускать задания из других файлов

В настоящее время я пытаюсь разделить мои файлы рейка, чтобы организовать их лучше. Для этого я добавил папку rake в мой каталог assets, который содержит один файл рейка для каждой группы задач.

Поскольку я исхожу из PHP, у меня есть только базовые знания Ruby/Rake и не удается получить действие по умолчанию для пространства имен после загрузки файла.

Заключенная Rake :: Task ... -строка внутри 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" в начале этих файлов будет эхом. Проблема заключается только в том, что действие :default для пространства имен в загруженном файле рейка не загружается.

4b9b3361

Ответ 1

Если ваша цель - загрузить задачи рейка из внешнего файла, вы можете сделать это следующим образом. Во-первых, скажем, у вас есть задача rake в файле с именем <project>/lib/tasks/hello.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 -T. Обратите внимание, что я использовал lib/tasks, поскольку это стандартный подход, применяемый приложениями Rails. Вы можете использовать assets или что угодно, хотя я предпочитаю lib/tasks даже в проектах без Rails. Я также предпочитаю разделять файлы задач на основе их пространства имен.

Ответ 2

Вы можете поместить свои задачи в папку rakelib/, которую загружает rake по умолчанию, или добавить определенную папку в свой Rakefile через:

Rake.add_rakelib 'lib/tasks'

Ответ 3

Вы всегда можете использовать Rake.add_rakelib 'tasks', как сказал @splattael. Одна вещь, которую вам нужно знать, файлы в каталоге "tasks" должны иметь расширение ".rake" вместо ".rb", иначе rake не будет загружать его для вас.

Пример файла:

После выполнения всего вышеизложенного используйте rake -T, чтобы проверить свою работу, чтобы убедиться, что рейк успешно загрузил ваши задачи.