Ruby on rails 为什么[rake db:migrate]的初始化会对lib/tasks目录中的rake任务运行语法检查?

Ruby on rails 为什么[rake db:migrate]的初始化会对lib/tasks目录中的rake任务运行语法检查?,ruby-on-rails,rake,Ruby On Rails,Rake,我有一个RubyOnRails应用程序的rake任务文件,它位于lib/tasks目录中。运行[rake db:migrate VERSION=0]似乎会迫使编译器检查lib/tasks文件中的语法。如果存在语法错误的文件,则[rake db:migrate]不会运行。为什么?那么,如果lib/tasks中有一个坏文件呢。这里发生了什么?谢谢。当Rake运行时,它会自动加载lib/tasks文件夹中的所有.Rake文件。当它加载这些任务时,如果您有语法错误,它将被捕获。当rake运行时,它会加载

我有一个RubyOnRails应用程序的rake任务文件,它位于lib/tasks目录中。运行[rake db:migrate VERSION=0]似乎会迫使编译器检查lib/tasks文件中的语法。如果存在语法错误的文件,则[rake db:migrate]不会运行。为什么?那么,如果lib/tasks中有一个坏文件呢。这里发生了什么?谢谢。

当Rake运行时,它会自动加载
lib/tasks
文件夹中的所有
.Rake
文件。当它加载这些任务时,如果您有语法错误,它将被捕获。

rake
运行时,它会加载
库/tasks
中的所有
.rake
文件,然后再查找指示它运行的任务。它加载所有文件,而不是在找到所需任务时停止,因为任务可以稍后按加载顺序被文件覆盖

通过指定所需的耙文件,可以避免加载所有耙文件:

rake mytask --rakefile lib/my_task.rake

你怎么知道的?有没有关于这方面的文档?在Rails文档的某个地方。这是Rails使用的配置规则之上的约定之一。那么,你是说,当我运行Rails附带的rake实用程序时,它是一个rake版本,已被修改以提供与Rails相关的约定?Rails附带的rake不是另一个版本。应用程序根目录中的Rakefile指示Rake加载哪些文件。