rake - Cargue archivos rastrillo y ejecute tareas desde otros archivos.
rakefile (3)
Actualmente estoy tratando de dividir mis archivos de rastrillo para organizarlos mejor. Para esto, he agregado una carpeta de rake
a mi directorio de assets
, que contiene un archivo de rake para cada grupo de tareas.
Como vengo de PHP, solo tengo un conocimiento muy básico de Ruby / Rake y no puedo ejecutar la acción predeterminada de mis espacios de nombres después de cargar el archivo.
El comentado fuera Rake :: Task ...
-string dentro de la app:init
lanza un error en el CL a mí:
rake aborted! uninitialized constant TASK
Aquí está el espacio de nombres / clase (si esta es la palabra correcta).
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
Gracias por adelantado.
Edición: al menos, puedo asegurarme de que el archivo se cargue, ya que el llano puts "file loaded"
al comienzo de esos archivos se hace eco. El problema parece ser que la acción :default
para el espacio de nombres en el archivo rastrillo cargado no se está cargando.
Puede poner sus tareas en rakelib/
folder, que rake
carga de forma predeterminada o agregar una carpeta específica en su Rakefile
través de:
Rake.add_rakelib ''lib/tasks''
Si su objetivo es cargar tareas de rake desde un archivo externo, puede hacerlo de la siguiente manera. Primero, digamos que tiene una tarea de rake en un archivo llamado <project>/lib/tasks/hello.rake
que se ve así:
desc "Say hello"
task :hello do
puts "Hello World!"
end
Luego puede crear un Rakefile
simple en su directorio <project>
para cargarlo así:
Dir.glob(''lib/tasks/*.rake'').each { |r| load r}
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
Por supuesto, esto cargará todos los archivos que terminen con la extensión de rake
. Simplemente puedes cargar hello.rake
así:
load ''./lib/tasks/hello.rake''
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
Para ver todas las tareas que se han cargado utiliza rake -T
. Tenga en cuenta que he usado lib/tasks
ya que ese es el enfoque estándar adoptado por las aplicaciones de Rails. Podría usar assets
o lo que prefiera, aunque yo prefiero lib/tasks
incluso en proyectos que no sean de Rails. También tiendo a separar mis archivos de tareas en función de su espacio de nombres.
Siempre se puede usar Rake.add_rakelib ''tasks''
Rake.add_rakelib, como dijo @splattael. Una cosa que debes saber, los archivos en el directorio ''tareas'' deben tener una extensión de ''.rake'' en lugar de ''.rb'', de lo contrario, rake no lo cargará por ti.
Archivo de muestra:
- https://github.com/nanoc/nanoc/blob/master/Rakefile
- https://github.com/nanoc/nanoc/tree/master/tasks
Después de hacer todo lo anterior, use rake -T
para verificar su trabajo para ver si rake ha cargado sus tareas con éxito.