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

问题描述 投票:0回答:2

我对 Rails 中

lib/
目录的理解是,它存储 非域特定代码作为最佳实践

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

那么有没有比

lib/tasks/
更好的地方来存储特定于域的 rake 脚本,还是我在这里遗漏了一些东西?

ruby-on-rails rake
2个回答
2
投票

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

在您的

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

示例:

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

Rails.application.load_tasks

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

0
投票

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

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

您可以通过调用任务在控制台中检查这一点,它不应该被定义。

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

© www.soinside.com 2019 - 2024. All rights reserved.