Carrierwave качва изображение локално, а не към S3

Конфигурирах Carrierwave+Fog да работи с Amazon S3. Проблемът, който имам, е, че всичко се създава в публичната папка на моя проект и не се качва в S3. Палецът и директорията са наред, само разположението на изображението не работи.

Моят ъплоудър:

    class ImageUploader < CarrierWave::Uploader::Base
    include CarrierWave::MiniMagick
    storage :fog
    def store_dir
      "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
    end
    version :thumb do
      process :resize_to_fit => [200, 200]
    end
    def extension_white_list
     %w(jpg jpeg gif png)
    end
end

мъгла.рб

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider => 'AWS',
    :aws_access_key_id => 'xxx',
    :aws_secret_access_key => 'yyy',
    :region => 'eu-west-1'
  }

  config.fog_directory = 'your_bucket_here'
  config.fog_public = true
  config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} 
end

Класът, който го използва:

class Image < ActiveRecord::Base
  belongs_to :product
  mount_uploader :remote_file, ImageUploader
end

И кода на контролера:

    i = Image.new
    i.save
    i.remote_file = params[:image]

    render :json => {:response => i.remote_file.url}

Отговорът е: {"response":"/uploads/tmp/1387464252-27678-6793/logo11w.png"}

И изображението се създава в публичната директория на проекта rails.

Благодаря ти!


person Oriol Farrús    schedule 19.12.2013    source източник


Отговори (1)


CarrierWave извършва качването с ActiveRecord before_save и after_save обратни извиквания. Във вашия контролер задайте remote_file, преди да извикате save:

i = Image.new
i.remote_file = params[:image]
i.save
person Ash Wilson    schedule 19.12.2013