如何仅列出属于我的 Rails 应用程序的 Rake 任务(没有不可维护的 grep 语句)?

Posted

技术标签:

【中文标题】如何仅列出属于我的 Rails 应用程序的 Rake 任务(没有不可维护的 grep 语句)?【英文标题】:How can I list only Rake tasks that belong to my Rails app (without unmaintainable grep statements)? 【发布时间】:2021-10-19 15:59:48 【问题描述】:

任何成熟的 Rails 应用都可以有很多 rake 任务:

Rails 本身附带的任务。 应用使用的各种 gem 中包含的任务。 已作为应用程序的一部分编写的任务。

我需要一种方法来仅列出作为我的应用程序的一部分编写的任务,并忽略 Rails 本身或我们正在使用的 gem 中包含的所有内容。

当然,我可以在rake -T 之后串起一长串的grep -v 语句,但这很麻烦。

我可以将该命令包装在一个函数中,但当然,一旦新 gem 或新版本的 Rails 添加了新任务,它就会过时。它还假定我不会添加任何在其名称中使用我过滤掉的任何字符串的任务。因此,当我创建新的 rake 任务时,我必须始终牢记该功能。所以它很笨拙,原因有很多。

我怎样才能让 Rails 为我提供我想要的信息?

(尝试使用 shell 做任何事情而不是发出命令是发疯的途径。shell 无法访问任何有关 rake 任务来自何处的信息。Rails 几乎可以肯定,或者可以为了弄清楚这一点。)

【问题讨论】:

您可以使用rake -T -f lib/tasks/foo.rake列出rakefile中定义的rake任务。因此,也许您可​​以遍历 lib/tasks 中的所有 rakefile 并使用 rake -T -f ... 获取他们的任务 @iconoclast 我真的认为最好为您的应用程序 rake 任务命名,这样 grep 过滤器就变得微不足道了。 @LesNightingill 这将需要将我的应用程序的所有 rake 任务重写为属于单个***命名空间。这是你的建议吗? @iconoclast 是的,恐怕这就是我的建议。它应该从项目一开始就完成。现在你必须回去重做所有的任务。如果这是一项艰巨的任务,也许可以编写一个脚本来完成它。 我的犹豫与任务艰巨无关,而是我认为这不是对任务进行分组的理想方式(尽管它确实解决了这个紧迫的问题)。我觉得任务(gem、rails 或我的应用程序)的 source 应该与其所属的命名空间完全正交。如果我创建一个与数据库相关的任务,将它放在db 命名空间中会很有意义。 【参考方案1】:

如果你想在生产控制台终端加载并运行任何任务,那么你运行这些命令

require 'rake' 
Rails.application.load_tasks
Rake::Task['my_task'].invoke

【讨论】:

以上是关于如何仅列出属于我的 Rails 应用程序的 Rake 任务(没有不可维护的 grep 语句)?的主要内容,如果未能解决你的问题,请参考以下文章

Rails-如何获得我的远程表单以JS响应?

使用 Audited gem 在 Rails 5.2 应用程序中在哪里列出未审核的列?

如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?

如何列出 Rails 3 应用程序中所有定义的环境?

如何仅更新 rails 6 中 current_user 的嵌套表单属性?

如何使我的背景图像仅出现在 rails 4 的一页上?