目前我正在尝试拆分我的rake文件以更好地组织它们.为此,我在rake
我的assets
目录中添加了一个文件夹,为每组任务保存一个rake文件.
由于我来自PHP,我只有非常基本的Ruby/Rake知识,并且无法在加载文件后运行我的命名空间默认操作.
Rake :: Task ...
内部的通配out -string在app:init
CL处抛出一个错误:
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:至少,我可以确定文件被加载,因为puts "file loaded"
这些文件开头的平面得到回应.问题似乎只是:default
加载的rake文件中的命名空间的操作未加载.
小智 51
您可以把您的任务到rakelib/
该文件夹中rake
加载默认情况下,或在您添加特定的文件夹Rakefile
通过:
Rake.add_rakelib 'lib/tasks'
Run Code Online (Sandbox Code Playgroud)
Aar*_*sey 38
如果您的目标是从外部文件加载rake任务,那么您可以按如下方式执行此操作.首先,假设您在一个名为rake的任务中调用<project>/lib/tasks/hello.rake
了如下所示的文件:
desc "Say hello"
task :hello do
puts "Hello World!"
end
Run Code Online (Sandbox Code Playgroud)
然后,您可以Rakefile
在<project>
目录中创建一个简单的加载方式,如下所示:
Dir.glob('lib/tasks/*.rake').each { |r| load r}
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
Run Code Online (Sandbox Code Playgroud)
当然,这将加载以rake
扩展名结尾的所有文件.您可以hello.rake
像这样加载:
load './lib/tasks/hello.rake'
desc "Say goodbye"
task :goodbye do
puts "See you later!"
end
Run Code Online (Sandbox Code Playgroud)
要查看已加载的所有任务,请使用rake -T
.请注意,我已经使用过,lib/tasks
因为这是Rails应用程序采用的标准方法.您可以使用assets
或任何您喜欢的,但我lib/tasks
甚至更喜欢非Rails项目.我还倾向于根据命名空间分离我的任务文件.
您可以随时使用@ Rake.add_rakelib 'tasks'
,如@splattael所述。您需要知道的一件事是,“任务”目录中的文件必须具有“ .rake”而不是“ .rb”的扩展名,否则rake不会为您加载该文件。
样本文件:
完成上述所有操作后,使用rake -T
来检查您的工作以查看rake是否已成功加载任务。
归档时间: |
|
查看次数: |
18485 次 |
最近记录: |