【问题标题】:Paperclip image resizing in rails回形针图像在导轨中调整大小
【发布时间】:2018-03-19 05:50:23
【问题描述】:

我在我的项目中使用回形针上传图片。我已经覆盖了默认路径 (path: ':class/:id/:attachment/:basename.:extension')。因为我错过了路径名称的样式,现在我需要为图像添加缩略图。现在我已经更改了路径(

    config.paperclip_defaults = {
       styles: { thumb: "40x40" },
       path: ':class/:id/:attachment/:style/:basename.:extension',
       url: ':class/:id/:attachment/:style/:basename.:extension'}

) 有风格,我已经在 S3 上传了图片。 当我为以前上传的文件运行回形针 rake 任务时,它会显示以下错误

NoMethodError: undefined method `match' for nil:NilClass.

当我通过控制台尝试重新处理方法时,

User Load (1.0ms)  SELECT  "users".* FROM "users" WHERE "users"."deleted_at" IS NULL ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
[paperclip] copying users/100000/profile_picture/Screen_Shot_2018-03-13_at_3.46.34_PM.png to local file /var/folders/f_/rp805gln2p7_1z0prxsw7www00015k/T/2bfc1b167915d853fafaa0a3ef5d83d220180319-5563-1cqfhvv.png
NoMethodError: undefined method `match' for nil:NilClass

【问题讨论】:

    标签: ruby-on-rails paperclip


    【解决方案1】:

    假设您使用rake paperclip:refresh CLASS=User 为已创建的图像创建版本。您可以查看更多选项here

    但是您当前对模型的更改不允许您这样做,因为您将路径从 path: ':class/:id/:attachment/:basename.:extension' 更改为 path: ':class/:id/:attachment/:style/:basename.:extension'

    您已经创建的图像位于abc/123/attachement_name/basename.:extension 之类的路径中。但是在您更改回形针后,请在 abc/123/attachement_name/origional/basename.:extension 中查看。

    您可以使用来自here 的 rake 任务。进行最少的更改后,它将解决您的问题。

    namespace :paperclip do
      desc "Recreate attachments and save them to new destination"
    
      task :move_attachments => :environment do
    
        Model.find_each do |model|
          unless model.image_file_name.blank?
            filename = Rails.root.join('public', 'system', 'images', model.id.to_s, model.image_file_name)
    
            if File.exists? filename
              #image = File.new filename
              model.remote_image_url = filename
              model.save
              model.image.reprocess! 
              image.close
            end
          end
        end
      end
    end
    

    用您的型号名称替换Model,用附件名称替换图像,一切都会正常。

    【讨论】:

    • 如何在 S3 上传文件
    • 您需要为 s3 url 提供初始路径,而不是 rails root,然后将路径附加到文件名。如果还不清楚,请告诉我
    • 能否详细解释一下
    • filename = Rails.root.join('public', 'system', 'images', model.id.to_s, model.image_file_name) 这一行我们正在使用之前的配置创建 url。只需执行 Object.url 它将返回新的 url 从新的 url 中删除 /origional。它将指向实际对象。通过 url 保存图片。
    • 在这种情况下文件名不会改变吗?
    猜你喜欢
    • 2011-01-24
    • 2011-10-25
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多