Герою с хранилищем несущей волны и рельсами, показывающими всегда одно и то же изображение - PullRequest
0 голосов
/ 31 октября 2018

так что у меня есть веб-приложение, которое отлично работает в разработке, и с помощью carrierwave и imagemagick я делаю некоторые изменения в фотографиях, которые мне нужно загрузить. Проблема в том, что когда на геройку, когда я спрашиваю основную версию фотографии, она все равно дает мне версию для большого пальца

class BannerUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  if Rails.env.development?
    storage :file
  else
    storage :dropbox
  end

  def store_dir
    if version_name.nil?
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}"
    else
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}_#{version_name}"
    end
  end

  process convert: :jpg
  process :crop
  process resize_to_limit: [1200, 260]

  def crop
    if model.crop_x.present?
      manipulate! do |img|
        x = model.crop_x.to_i
        y = model.crop_y.to_i
        w = model.crop_w.to_i
        h = model.crop_h.to_i
        r = model.crop_r.to_i
        img.rotate r
        img.crop([[w, h].join('x'), [x, y].join('+')].join('+'))
      end
    end
  end

  version :thumb do
    process resize_to_fill: [640, 320]
  end

  def extension_whitelist
    %w(jpg jpeg png)
  end

  def filename
    if original_filename
      "#{secure_token}.#{file.extension}"
    elsif file
      file.filename
    end
  end

protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end
end

это мой загрузчик

тогда, на мой взгляд, у меня есть image_tag(model.banner_url(:thumb), чтобы получить версию для большого пальца, и image_tag @model.banner_url, чтобы получить большую версию. Проблема в том, что второй на моей локальной машине работает просто отлично, но когда на героку он выдает мне такой же образ первого. Он создает правильные папки и файлы и правильно их обрезает, но не получает правильную. Я использую

gem 'dropbox-sdk-v2', '~> 0.0.3'
gem 'carrierwave-dropbox', '~> 2.0'

как хранилище герою, с явно дропбокс аккаунтом

1 Ответ

0 голосов
/ 01 ноября 2018

Часто вам захочется добавить разные версии одного и того же файла. Классическим примером являются миниатюры изображений. Есть встроенная поддержка это *

Мне кажется, проблема в том, как вы определяете метод store_dir.

Определите это так:

def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

А также документация CarrierWave рекомендует использовать загрузчик следующим образом:

uploader = AvatarUploader.new
uploader.store!(my_file)                              # size: 1024x768

uploader.url # => '/url/to/my_file.png'               # size: 800x800
uploader.thumb.url # => '/url/to/thumb_my_file.png'   # size: 200x200

Источник: https://github.com/carrierwaveuploader/carrierwave

...