据我所知,Rake是DSL和Ruby的子集。我意识到我必须创建Rakefile
作为入口点(令人惊讶的是Rakefile.rake不是一个选项)。在这个rakefile中,我可能包含对其他* .rake,* .rb文件的引用:
load './file1.rake'
#require './file1.rake' #Why does this fail?
require './file2'
task 'a' => ['rakeFile', 'rbFile'] do
puts 'helo wurld'
end
task 'b' => ['rbFile'] do
puts 'helo wurld'
end
require
似乎无法处理* .rake文件。这似乎有问题。我不明白为什么我应该使用* .rake文件扩展名。在Rake中编程时,我不能将require
与* .rake一起使用,* .rb似乎工作正常......使用* .rake有什么好处超过* .rb?
答案 0 :(得分:2)
我使用“.rb”作为Ruby和Rake文件的扩展名。 Rake文件 ARE Ruby文件,它们只是指DSL提供的扩展。通过使用相同的扩展,我的编辑很高兴,Ruby很高兴。
如果不这样做,Ruby的require
将自动提供扩展名:
如果文件名的扩展名为“.rb”,则将其作为源文件加载;如果扩展名是“.so”,“。o”或“.dll”,或者是当前平台上的默认共享库扩展,Ruby会将共享库作为Ruby扩展加载。否则,Ruby会尝试将“.rb”,“。so”等添加到名称中,直到找到。如果找不到名为的文件,则会引发LoadError。
另外,请注意load
与require
做的事情不同。 load
强制文件重新加载,require
执行一次。这意味着如果您在循环中load
文件,可能会花费更多,特别是如果该文件启动缓慢。
答案 1 :(得分:0)
无论您是使用.rake还是.rb文件扩展名,这些文件都会以ruby的形式加载。 .rake文件扩展名提供的唯一额外优势是rake程序理解扩展名为.rake的文件肯定包含rake任务,因此它会在那里找到它们(例如rake -T,列出可用任务,会找到rake .rake文件中的任务)
答案 2 :(得分:0)
rake
和ruby
的行为至少有一点不同。 gets.chomp
必须写为STDIN.gets.chomp
。
Evidently,在lib/tasks
中存储文件时,Rails使用* .rake作为约定。由于我的项目是.NET,所以我并不十分关心。