Загружать файлы рейка и запускать задания из других файлов
В настоящее время я пытаюсь разделить мои файлы рейка, чтобы организовать их лучше. Для этого я добавил папку 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
для пространства имен в загруженном файле рейка не загружается.
Ответы
Ответ 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
, чтобы проверить свою работу, чтобы убедиться, что рейк успешно загрузил ваши задачи.