如何仅从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
相关产品推荐
相关产品推荐

