.rake和.rb文件扩展名之间的差异

时间:2015-02-03 16:26:57

标签: ruby rake

据我所知,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?

3 个答案:

答案 0 :(得分:2)

我使用“.rb”作为Ruby和Rake文件的扩展名。 Rake文件 ARE Ruby文件,它们只是指DSL提供的扩展。通过使用相同的扩展,我的编辑很高兴,Ruby很高兴。

如果不这样做,Ruby的require将自动提供扩展名:

  

如果文件名的扩展名为“.rb”,则将其作为源文件加载;如果扩展名是“.so”,“。o”或“.dll”,或者是当前平台上的默认共享库扩展,Ruby会将共享库作为Ruby扩展加载。否则,Ruby会尝试将“.rb”,“。so”等添加到名称中,直到找到。如果找不到名为的文件,则会引发LoadError。

另外,请注意loadrequire做的事情不同。 load强制文件重新加载,require执行一次。这意味着如果您在循环中load文件,可能会花费更多,特别是如果该文件启动缓慢。

答案 1 :(得分:0)

无论您是使用.rake还是.rb文件扩展名,这些文件都会以ruby的形式加载。 .rake文件扩展名提供的唯一额外优势是rake程序理解扩展名为.rake的文件肯定包含rake任务,因此它会在那里找到它们(例如rake -T,列出可用任务,会找到rake .rake文件中的任务)

答案 2 :(得分:0)

rakeruby的行为至少有一点不同。 gets.chomp必须写为STDIN.gets.chomp

Evidently,在lib/tasks中存储文件时,Rails使用* .rake作为约定。由于我的项目是.NET,所以我并不十分关心。