`
jsntghf
  • 浏览: 2543440 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

paperclip中从id到id_partition的转换脚本

阅读更多

看过用paperclip中的id_partition代替id这篇文章后,如果你想将原来的配置:

 

  has_attached_file :picture, :styles => {:medium => "480x360>", :thumb => "120x90>", :original =>"480x360>"},
    :path => ":rails_root/public/uploads/:class/:id/:style/picture.:extension",
    :url => "/uploads/:class/:id/:style/picture.:extension"

 

转换成新的配置:

 

  has_attached_file :picture, :styles => {:medium => "480x360>", :thumb => "120x90>", :original =>"480x360>"},
    :path => ":rails_root/public/uploads/:class/:id_partition/:style/picture.:extension",
    :url => "/uploads/:class/:id_partition/:style/picture.:extension"

 

新添加的文件,不会有任何问题。但以前的遗留文件该如何处理呢?

 

按照上面的配置,必须将文件从类似/public/uploads/pictures/1234的目录结构转到/public/uploads/pictures/000/001/234目录结构才行。

 

下面提供一个简单的转换脚本:

 

  task(:partitions => :environment) do
    require 'fileutils'
    start = Time.now
    vars = {}
    ARGV.each do |str|
      vars[$1] = $2 if str =~ /\A(.*?)=(.*)\z/
    end
    raise "必须指定TARGET_DIR. Example: TARGET_DIR=/opt/data/public/uploads/pictures" if vars['TARGET_DIR'].nil?
    FileUtils.cd(vars['TARGET_DIR'])
    dirs_to_move = Dir.glob("*/")
    FileUtils.mkdir '000'
    puts "#{dirs_to_move.size}个文件将被转换..."
    puts "移动文件到新的目录..."
    dirs_to_move.each_with_index do |dir, index|
      puts "还剩" + (dirs_to_move.size.to_i - index.to_i - 1).to_s + "个文件需要转换..."
      parent = "000/"
      parent << add_leading_zeros(File.basename(dir)[0..-4])
      child = File.basename(dir)[-3..-1] || add_leading_zeros(File.basename(dir))
      FileUtils.mkdir_p parent unless FileTest.directory?(parent)
      FileUtils.mv dir, "#{parent}/#{child}" if FileTest.directory?(dir)
      puts "#{index}个文件被移除..." if index%1000 == 0 && index > 0
    end
    puts "Partitioned #{dirs_to_move.size} folders into #{Dir.glob("000/*/").size} partitions in #{Time.now - start} seconds."
  end
  
  def add_leading_zeros(i)
    File.basename(i).to_s.rjust(3, '0')
  end

 

执行完后,原有的文件目录结构便转换成新的目录结构了。

分享到:
评论

相关推荐

    rails上传文件_paperclip

    config.paperclip_defaults = { storage: :filesystem, path: ':rails_root/public/system/:class/:attachment/:id_partition/:style/:filename', url: '/system/:class/:attachment/:id_partition/:style/:...

    paperclip-storage-encrypted_filesystem:使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展 Paperclip

    您的 Paperclip 模型将需要两个额外的二进制列: paperclip_encryption_key和paperclip_encryption_iv来存储加密机密。 class AddPaperclipEncryptionKeyAndPaperclipEncryptionIvToMyModel &lt; A

    paperclip_database_attachments_responder:对 paperclip_database gem 的扩展

    综合解决方案请查看我的paperclip_database分支,并将此解决方案集成到:。安装由于 PaperclipDatabaseAttachmentsResponder 覆盖了 paperclip_database 的内部 api,因此使用精确的'2.2.1'版本。 将这些行放入您的...

    paperclip模板

    Paperclip - Responsive Professional Theme for Business Projects and Mobile Apps Perfect for business and personal use Built with LESS Looks great on all major browsers, tablets and phones 21 unique ...

    Ruby-PaperClipActiveRecord的简单文件附件管理

    PaperClip是由Thoughtbot开发的一个Ruby库,它允许开发者将文件上传功能轻松地添加到ActiveRecord模型中。让我们深入探讨一下这个强大的工具及其工作原理。 首先,PaperClip的核心功能是将文件上传与数据库记录关联...

    paperclip_watermark:回形针处理器在图像上应用水印

    回形针水印描述这是一个简单的 Paperclip 处理器,用于在 Paperclip 的图像上应用水印。 水印将调整大小以适合基本图像。 很少有选项可用于指定位置和不透明度: watermark_distance_from_top : 以百分比指定从顶部...

    paperclip_torrent:生成一个.torrent文件以补充您的回形针上传

    gem 'paperclip_torrent', github: "fattymiller/paperclip_torrent" 在模型中,正常设置has_attached_files ,包括:torrentify处理器,如下所示: has_attached_file :attachment, { styles: { audio_128kbps_...

    yarle:Yarle-Evernote笔记到Markdown的终极转换器

    Yarle是Evernote笔记到Markdown的终极转换器。 特征: 亚尔可以转换: :memo: 任何文字 :memo: 所有元数据:原始创建时间,上次修改时间,标签,GPS位置,笔记本名称,源URL :link: 外部链接 :link: Evernote...

    paperclip-s3-tutorial-korean:回形针文件上传到 s3 韩文

    access_key_id: ' YOUR_ACCESS_KEY ' secret_access_key: ' YOUR_SECRET_ACCESS_KEY ' region: ' YOUR_BUCKET_REGION ' production: &lt;&lt; : *default test: &lt;&lt;: *default 保存文件后,将s3信息添加...

    paperclip

    附加的文件保存到文件系统中,并通过易于理解的规范在浏览器中引用,该规范具有明智而有用的默认值。 有关更多详细选项,请参见有关has_attached_file的文档。 完整的在线。 要求 Ruby和Rails Paperclip现在需要...

    使用Rails上传和转换视频

    然后,我们可以使用像是paperclip-ffmpeg或者carrierwave-ffmpeg这样的gem来集成FFmpeg到Rails应用中。对于ActiveStorage,我们可以自定义一个后台任务,比如使用Sidekiq或Resque来处理视频转换。 以下是一个使用...

    paperclip-s3:未维护

    这不再维护!! 请改用。 回形针S3收纳 ... 可以为用户提供access_key_id的s3_credentials哈希选项和相反,使用secret_access_key 。 如果您使用的是 ,则可以使用 config:add 命令: heroku config:add

    AnalisisAvanzado_Repositorio_Bernal

    多森特:恩里克·阿尔瓦雷斯·海梅·莱昂纳多时期: Febrero — Julio 2021nd迪斯 :paperclip: :clipboard: :hourglass_not_done: :trophy: :bar_chart: :open_file_folder: :page_facing_up: :framed_picture: :...

    paperclip_on_rails:工作回形针项目

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) ...

    delay_paperclip:使用delay_job或Resque在后台处理您的回形针附件

    Paperclip最常见的用例是轻松将图像文件附加到ActiveRecord模型。 大多数情况下,这些图像文件将具有多种样式,并且在创建它们时需要调整大小。 这通常是一个非常慢的操作,应该在后台任务中处理。 我敢肯定,每个...

    mongoid-paperclip:蒙古族

    Mongoid ::回形针将集成到。 实际上,与使用回形针和ActiveRecord ORM相比,此设置更容易,更快捷。... 与ActiveRecord不同,Mongoid不使用迁移,因此我们不需要在单独的文件中定义Paperclip列。 调用h

    Analisis_Avanzado_de_Software

    Analisis_Avanzado_de_Software :laptop_... :clipboard: Carpeta博客 :paperclip: Carpeta Docs :orange_book: Unidad 3 :clipboard: Carpeta博客 :paperclip: Carpeta Docs :blue_book: Unidad 4 :clipboard: C

    paperclip-av-transcoder, 使用 ffmpeg/avconv的Paperclip 音频/视频转码器.zip

    paperclip-av-transcoder, 使用 ffmpeg/avconv的Paperclip 音频/视频转码器 Paperclip 转码器使用 ffmpeg/avconv的Paperclip 音频/视频转码器。这是( https://github.com/owahab/paperclip-ffmpeg )的替代品。状态

    AnalisisAvanzadoDeSoftware:资料存储库

    多森特:恩里克·阿尔瓦雷斯·海梅·莱昂纳多时期: Febrero — Julio 2021nd迪斯 :paperclip: :clipboard: :hourglass_not_done: :hourglass_not_done: :hourglass_not_done: :bar_chart: :open_file_folder: :...

    simple_paperclip_multi_upload

    自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列、缓存服务器、搜索引擎等) 部署说明… 如果您不...

Global site tag (gtag.js) - Google Analytics