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

如何仅从S3中DD.MM.YYYY格式文件夹复制PDF到Archive并解决rake任务报错

问题解决方案

1. Rake任务「Don't know how to build this task」报错修复

你可以按以下顺序排查问题:

  • 确认Rake文件存放在Rails项目的lib/tasks/目录下,文件后缀必须为.rake(例如命名为courts.rake),如果放在其他目录或者后缀为.rb,Rails无法识别任务
  • 执行命令rake -T | grep courts验证任务是否正常加载,执行后能看到courts:move_old_documents等任务列表说明加载正常,看不到就检查文件语法和路径
  • 你当前代码存在语法错误:TODO行有多余的闭合大括号,会导致Rake加载失败,需要先删除多余符号

2. 筛选DD.MM.YYYY格式文件夹下的PDF文件

S3的文件路径直接存在对象的key属性中,你可以用正则匹配路径前缀符合DD.MM.YYYY/格式的PDF文件,修改后的完整任务代码如下:

namespace :courts do
  task update_ocr_documents: :environment do
    OcrDocument.find_each do |ocr_document|
      ::Courts::Operations::OcrDocuments::RecognizeExisting.run(id: ocr_document.id, skip_auth: true)
    end
  end

  task sync_ocr_bucket: :environment do
    ::Courts::SyncronizeBucketJob.perform_now
  end

  task move_old_documents: :environment do
    bucket = Settings.file_storage.ocr_documents.s3_credentials.bucket
    file_util = Courts::Aws::FileUtil.new(bucket)
    # 匹配路径前缀为DD.MM.YYYY格式文件夹下的PDF文件
    date_folder_regex = /^\d{2}\.\d{2}\.\d{4}\//
    file_util.get_objects do |obj| 
      obj.key.ends_with?('.pdf') && obj.key.match?(date_folder_regex)
    end
    file_util.move_objects('archive')
  end
end

注:如果日期文件夹不在存储桶根目录、存在上层父路径,删除正则开头的^即可;如果需要严格校验日期合法性,避免匹配到32.13.2024这类无效日期,可以在正则匹配后额外加日期解析逻辑过滤无效文件夹


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:39:02