Как использовать Cloudinary только на производстве и использовать мое хранилище файлов при разработке (Использование Carrierwave Rails)? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть приложение Rails , развернутое на Heroku .Я использую надстройку Cloudinary и гем Carrierwave для загрузки изображений.

Следуя документации Cloudinary, я мог настроить загрузку изображений в Production успешно, нов разработке это также загрузка в облако.Моя проблема здесь заключается в том, что я хотел бы использовать хранилище файлов на своем локальном компьютере вместо загрузки изображений в Cloudinary (просто загрузить в Cloudinary в работе).

Я попытался исправить это с помощью storage :file if Rails.env == "development", но нене работаетЛюбая идея, чтобы решить это?

Мой загрузчик:

class ImageUploader < CarrierWave::Uploader::Base
  include Cloudinary::CarrierWave
  include CarrierWave::MiniMagick

  # storage :file if Rails.env == "development"

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

  version :thumb do
    process resize_to_fit: [50, 50]
  end

  version :card do
    process resize_to_fit: [250, 250]
  end
end

Спасибо!

1 Ответ

0 голосов
/ 04 апреля 2019

Я также помню, что не мог справиться с этой ситуацией в прошлом проекте.Поскольку мы использовали AWS S3, мы могли дифференцировать активы от deve и prod, сохраняя их в другом сегменте, однако в Cloudinary это, по-видимому, невозможно.

Возможно, эта настройка, которую мы использовали для тестовой среды, могла бы помочь вам вваша среда разработки.

Поместите этот код в config/initializers/carrierwave.rb

if Rails.env.test? || Rails.env.development?
  CarrierWave.configure do |config|
    config.storage = :file
    config.enable_processing = false
    config.asset_host = ActionController::Base.asset_host
  end

  ImageUploader

  CarrierWave::Uploader::Base.descendants.each do |klass|
    next if klass.anonymous?
    klass.class_eval do
      # Need to set the storage here otherwise the class
      # overrides it in the uploader definition
      storage :file

      def cache_dir
        "#{Rails.root}/spec/support/uploads/tmp"
      end

      def store_dir
        "#{Rails.root}/spec/support/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
      end
    end
  end
else
  CarrierWave.configure do |config|
    # Production setup
  end
end

Надеюсь, это поможет вам.У нас это сработало.

...