【问题标题】:Why are rake tasks stored in lib/tasks/?为什么 rake 任务存储在 lib/tasks/ 中?
【发布时间】:2022-03-09 22:54:48
【问题描述】:

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

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

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

【问题讨论】:

  • 除了domain 之外是否还有一个原因是你想让你成为 rake 任务,我过去曾大量使用它从域共享代码并且没有问题,尽管它取决于复杂性,也许您正在尝试实现比我更复杂的目标。

标签: ruby-on-rails rake


【解决方案1】:

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

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

例子:

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

Rails.application.load_tasks

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多