2014-01-03 5 views
0

У меня есть проект Rails 4 с devise -генерированный users. Каждый user имеет avatar, который загружается в Amazon S3 через carrierwavefog). Я хотел бы реализовать carrierwave_direct, чтобы загрузить изображения непосредственно на S3.Rails + Devise + Carrierwave + Carrierwave_direct

Я следовал these steps до этого шага:

You can generate a direct upload form like this:

class AvatarController < ApplicationController 
    def new 
    @uploader = User.new.avatar 
    @uploader.success_action_redirect = new_user_url 
    end 
end 

<%= direct_upload_form_for @uploader do |f| %> 
    <%= f.file_field :avatar %> 
    <%= f.submit %> 
<% end %> 

И запутались.

До сих пор у меня есть:

  • предполагаются AvatarController должны быть созданы на app/controllers/avatar_controller (с тем же фрагментом, как описано выше)

  • положить direct_upload_form_for @uploader (полный фрагмент кода выше) в мой пользователя «редактировать» форма.

И я получаю ошибку:

`undefined method `direct_fog_url'` 

Кто-нибудь есть идеи, как получить carrierwave_direct с devise пользователей? Примерный проект был бы замечательным.

ответ

0

Похоже, если вы следовали шаги

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS', 
    :aws_access_key_id  => ENV['AWS_ACCESS_KEY_ID'], 
    :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    config.fog_directory = ENV['AWS_FOG_DIRECTORY'] # bucket name 
end 

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWaveDirect::Uploader 
end 

class UploaderTest < Sinatra::Base 
    get "/" do 
    @uploader = ImageUploader.new 
    @uploader.success_action_redirect = request.url 
    haml :index 
    end 
end 

, а также

%form{:action => @uploader.direct_fog_url, :method => "post", :enctype => "multipart/form-data"} 
    %input{:name => "utf8", :type => "hidden"} 
    %input{:type => "hidden", :name => "key", :value => @uploader.key} 
    %input{:type => "hidden", :name => "AWSAccessKeyId", :value => @uploader.aws_access_key_id} 
    %input{:type => "hidden", :name => "acl", :value => @uploader.acl} 
    %input{:type => "hidden", :name => "success_action_redirect", :value => @uploader.success_action_redirect} 
    %input{:type => "hidden", :name => "policy", :value => @uploader.policy} 
    %input{:type => "hidden", :name => "signature", :value => @uploader.signature} 
    %input{:name => "file", :type => "file"} 
    %input{:type => "submit", :value => "Upload to S3"} 

Они будут применимы только к вам при использовании storage :fog в вашем image_uploader.rb или если вы используете Sinatra/haml ... Просто избавиться от кода, который я вложил, должно исправить проблему.

0

Ошибка «неопределенного метода« direct_fog_url »« вероятна, потому что вы подаете активный объект записи на этот метод, а не на загрузчик несущей.

Найдите в своем коде, где вы используете «direct_fog_url», и убедитесь, что @uploader - это @ user.avatar, а не @user.

Например, ваша работа должна выглядеть примерно так:

def perform(user_id, key) 
    user = User.find user_id 
    uploader = user.avatar 
    user.key = key 
    user.remote_receipt_url = uploader.direct_fog_url(with_path: true) 
    user.save! 
end 
+0

сделал Вам пригодился этот ответ? Если так ... проверьте это. – hellion

Смежные вопросы