为什么 rake 任务存储在 lib/tasks/?

Why are rake tasks stored in lib/tasks/?

我对rails中的lib/目录的理解是存放non-domain specific code as a best practice.

但是,我的 Rake 脚本非常适合我的域。他们做一些事情,比如创建新模型。

那么有没有比 lib/tasks/ 更好的地方来存储特定于域的 rake 脚本,或者我在这里遗漏了什么?

我喜欢这个想法,我同意 - lib 曾经是一个非常垃圾的抽屉,作为一个 Rails 社区,我们已经移走了一些垃圾,但是是的,Rake 任务通常是非常具体的应用程序逻辑。

在您的 Rakefile 中,您所要做的就是 load 您的新 Rakefile(reader 的练习:迭代文件夹中的文件,而不是明确指定它。

示例:

require File.expand_path('../config/application', __FILE__)

Rails.application.load_tasks

load('app/tasks/my_task.rake') # <--- my custom task!!!

以上是正确的,但您应该添加以下内容以防止 zeitwerk 创建 Tasks 常量。 (不使用zeitwerk loader的忽略)

Rails.autoloaders.main.ignore('app/tasks');

您可以通过调用 Tasks 在控制台中检查它,它不应该被定义。

另一种选择可能是在 /tasks 中添加 rake 任务而不是 app/tasks