You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅列出Rails应用自定义Rake任务,无需使用难维护的grep语句

仅列出Rails应用自定义Rake任务的实现方案

Rake原生支持记录任务的定义文件路径,我们可以直接基于路径过滤出存放在应用lib/tasks/目录下的自定义任务,完全规避shell grep方案的所有缺陷。

实现步骤

  • 在应用lib/tasks/目录下新建list_custom.rake文件,写入以下代码:
namespace :list do
  desc "仅展示当前应用自定义的Rake任务,可传入关键词过滤,用法:rake list:custom_tasks [关键词]"
  task custom_tasks: :environment do
    # 开启任务元数据记录,确保能拿到任务定义路径
    Rake::TaskManager.record_task_metadata = true
    # 加载应用所有Rake任务
    Rails.application.load_tasks

    custom_task_dir = Rails.root.join("lib/tasks").to_s
    filter_keyword = ARGV.drop(1).first

    Rake.application.tasks.each do |task|
      # 跳过无描述的隐藏任务,和原生rake -T行为保持一致
      next unless task.full_comment
      # 过滤自定义目录下的任务
      is_custom = task.locations.any? { |path| path.start_with?(custom_task_dir) }
      next unless is_custom
      # 支持关键词过滤
      next if filter_keyword && !task.name.include?(filter_keyword)

      # 输出格式和原生rake -T保持一致
      printf "%-#{Rake.application.max_column_width}s # %s\n", task.name, task.full_comment
    end
    # 避免rake把额外参数当成任务执行
    exit 0
  end
end
  • 执行命令使用:
    • 列出所有自定义任务:rake list:custom_tasks
    • 按关键词过滤自定义任务(比如过滤所有和db相关的自定义任务):rake list:custom_tasks db

方案优势

  • 完全基于Rake、Rails原生能力实现,不受Rails版本升级、新增/更新gem的影响,过滤规则永久有效
  • 不存在误过滤问题,不需要要求自定义任务命名避开特定关键词
  • 可扩展性强,可根据需求调整为按子目录分类展示、导出任务列表等功能

内容的提问来源于stack exchange,提问作者iconoclast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:39:04