2014-01-20 6 views
1

Я пытаюсь использовать Paperclip и SWS S3 на Heroku, чтобы пользователи могли загружать изображения.Paperclip S3 Heroku - missing required: bucket option

Я следую this tutorial и то, что у меня есть, когда создать новый пользователь

ArgumentError in UsersController#create 

app/controllers/users_controller.rb:28:in `create' 

я не имею ни малейшего представления с ним

users_controller.rb

def create 
    @user = User.new(params[:user]) 
    if @user.save 
     sign_in @user 
     flash[:success] = "Welcome to bequem!" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

new.html.erb

<div class="col-md-4 col-md-offset-4"> 
<%= provide(:title, 'Sign up') %> 
<h1>Sign up</h1> 


<%= form_for(@user) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.label :avatar %><br /> 
    <%= f.file_field :avatar %> 
--> 
    <%= f.label :name %> 
    <%= f.text_field :name %> 

    <%= f.label :email %> 
    <%= f.text_field :email %> 

    <%= f.label :password %> 
    <%= f.password_field :password %> 

    <%= f.label :password_confirmation, "Confirmation" %> 
    <%= f.password_field :password_confirmation %> 

    <%= f.submit "Create my account", :class => "btn btn-large btn-primary" %> 
<% end %> 


</div> 

скрепка конфигурации на производстве и разработке

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
    :bucket => ENV['xxx'], 
    :access_key_id => ENV['xxx'], 
    :secret_access_key => ENV['xxx'] 
    } 
} 

модели пользователя

class User < ActiveRecord::Base 

    # This method associates the attribute ":avatar" with a file attachment 
    has_attached_file :avatar, styles: { 
    thumb: '100x100>', 
    square: '200x200#', 
    medium: '300x300>' 
    } 

    attr_accessible :name, :email, :password, :password_confirmation, :avatar 

papertrail журнала

Started GET "/signup" for 176.226.131.101 at 2014-01-20 17:45:54 +0000 
Jan 20 09:45:55 milker app/web.1: Processing by UsersController#new as HTML 
Jan 20 09:45:55 milker app/web.1: Rendered shared/_error_messages.html.erb (0.6ms) 
Jan 20 09:45:55 milker app/web.1: Rendered users/new.html.erb within layouts/application (164.7ms) 
Jan 20 09:45:55 milker app/web.1: Rendered layouts/_shim.html.erb (0.0ms) 
Jan 20 09:45:55 milker app/web.1: Completed 200 OK in 199ms (Views: 168.1ms | ActiveRecord: 15.3ms) 
Jan 20 09:46:11 milker app/web.1: Started POST "/users" for 176.226.131.101 at 2014-01-20 17:46:11 +0000 
Jan 20 09:46:11 milker app/web.1: Processing by UsersController#create as HTML 
Jan 20 09:46:11 milker app/web.1: Parameters: {"utf8"=>"✓", "authenticity_token"=>"5KZg5kTVOWKN/VBFlw6BC5pJe1EGCBYtVN5zBXLXNT4=", "user"=>{"avatar"=>#<ActionDispatch::Http::UploadedFile:0x007f4f673ad6b8 @original_filename="3adPUTPPeg8.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"3adPUTPPeg8.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<Tempfile:/tmp/RackMultipart20140120-2-n87ap6>>, "name"=>"slasher", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create my account"} 
Jan 20 09:46:11 milker app/web.1: Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:11 milker app/web.1: Command :: convert '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' -auto-orient -resize "100x100>" '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-k3pl9m' 
Jan 20 09:46:11 milker app/web.1: Command :: file -b --mime '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-k3pl9m' 
Jan 20 09:46:11 milker app/web.1: Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: convert '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' -auto-orient -resize "200x" -crop "200x200+0+33" +repage '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1acel98' 
Jan 20 09:46:12 milker app/web.1: Command :: file -b --mime '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1acel98' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: identify -format %m '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' 
Jan 20 09:46:12 milker app/web.1: Command :: convert '/tmp/3adPUTPPeg820140120-2-yc1128.jpg[0]' -auto-orient -resize "300x300>" '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1fz8qbp' 
Jan 20 09:46:12 milker app/web.1: Command :: file -b --mime '/tmp/3adPUTPPeg820140120-2-yc112820140120-2-1fz8qbp' 
Jan 20 09:46:12 milker app/web.1: [paperclip] saving /users/avatars/000/000/007/original/3adPUTPPeg8.jpg 
Jan 20 09:46:13 milker heroku/router: at=info method=POST path=/users host=milker.herokuapp.com request_id=97266e1a-098b-4676-9ad2-791e85d25f43 fwd="176.226.131.101" dyno=web.1 connect=14ms service=2457ms status=500 bytes=643 
Jan 20 09:46:13 milker app/web.1: Completed 500 Internal Server Error in 1653ms 
Jan 20 09:46:13 milker app/web.1: ArgumentError (missing required :bucket option): 
Jan 20 09:46:13 milker app/web.1: app/controllers/users_controller.rb:28:in `create' 

Любые идеи?
спасибо заранее

+0

Вы должны добавить еще некоторую информацию, как то, что вы пробовали до сих пор, где она не ... – nKn

ответ

2

в дополнение к ответу manojild, вот что вам нужно сделать (мы имели эту проблему раньше):


Модель

Не знаю почему, но вы должны включить опцию :bucket в вашей Paperclip модели:

has_attached_file :image, 
       :styles => { :medium => "x300", :thumb => "x100" }, 
       :default_url => "************", 
       :storage => :s3, 
       :bucket => 'bucket_name', 
       :s3_credentials => S3_CREDENTIALS (we set this in an initializer) 

ENV Vars

You» re используя ENV vars в вашем development.rb

Если вы не установили эти VAR s в своей операционной среде, вы не сможете получить к ним доступ.Я рекомендую использовать Figaro gem для обработки ENV варов в производстве развития &, сохраняя консистенцию

Неужели вы хотите, чтобы ваш ENV вары быть похожим на это:

:bucket => ENV['S3_BUCKET_NAME'], 
:access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 

Вы их фактическое содержанием в настоящее время

+0

Спасибо. Я попробую. Вы написали (мы установили это в init ializer). Это означает, что я должен написать ': s3_credentials => { : ведро => ENV [ 'ххх'], : access_key_id => ENV [ 'ххх'], : secret_access_key => ENV [ 'ххх' ] } ' в initializer/paperclip.rb? – salmon

+0

Если вы собираетесь использовать инициализатор, вы должны использовать «голые» данные (не ENV vars) (ваш код является правильным синтаксисом). Но если вы хотите использовать варвары ENV, установите драгоценный камень Figaro - делает его на 100% проще –

+0

Он работает! Спасибо. – salmon

1

Из кода:

:bucket => ENV['BEQUEM'], 
:access_key_id => ENV['AKredacted'], 
:secret_access_key => ENV['AKredacted'] 

Следуйте учебник точно. Он просит вас добавить:

:bucket => ENV['S3_BUCKET_NAME'], 
:access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 

Эти переменные среды, и устанавливается с помощью команды heroku config. Вы заменили их с фактическими значениями (и, возможно, вызывает проблемы безопасности, подвергая их здесь в общественных местах)

Как указано в руководстве, выполните следующие команды от вас утешит:

$ heroku config:set S3_BUCKET_NAME=your_bucket_name 
$ heroku config:set AWS_ACCESS_KEY_ID=your_access_key_id 
$ heroku config:set AWS_SECRET_ACCESS_KEY=your_secret_access_key 

Не забудьте заменить your_bucket_name и т.д. с фактическим значением здесь :)

+0

O Благодарю. Я думаю, что неправильно понял этот пункт учебника. Я внес изменения в конфигурацию paperclip, но у меня есть такая же ошибка при разработке, и я не могу развернуть на heroku, к сожалению – salmon

+0

@ V.Prosh. Вы должны установить эти переменные среды в своем терминале, если хотите это для разработки. Как 'S3_BUCKET_NAME = 'bucket' bundle exec rails s' – manojlds

+0

ОК Я попробую it.I установить конфигурацию heroku с консоли и исправить production.rb, как вы сказали, и вот журнал ' 20 января 18:59:33 milker app /web.1: [paperclip] save /users/avatars/000/000/010/original/0CE27BAE971DF6494F20441D62DFC0D1_1100_550.JPEG 20 января 18:59:34 milker app/web.1: Завершено 500 Внутренняя ошибка сервера в 2787ms 20 января 18:59:34 milker app/web.1: AWS :: Errors :: MissingCredentialsError ( 20 января 18:59:34 milker app/web.1: Отсутствующие учетные данные. 20 янв. 18:59:34 milker app/web .1: Невозможно найти учетные данные AWS. Вы можете настроить свои учетные данные AWS. И та же ошибка в методе создания – salmon

0

Модель рабочего пользователя. Планируйте использовать Fedora в будущем.

has_attached_file :avatar, :styles => { :small => '60x60#', :large => '300x300#' }, :default_style => :large, 
    :storage => :s3, 
    :default_url => '/images/:attachment/missing_:style.png', 
    :path => "users/:id/avatar/:style.:extension", 
    :bucket => "bequem", 
    :s3_credentials => { 
    :access_key_id => "xxx", 
    :secret_access_key => "xxx" 
    } 
0

Добавьте это в ваш файл application.rb внутри модуля и класса:

config.autoload_paths += %W(#{config.root}/lib) 
config.before_configuration do 
    env_file = File.join(Rails.root, 'config', 'local_env.yml') 
    YAML.load(File.open(env_file)).each do |key, value| 
     ENV[key.to_s] = value 
    end if File.exists?(env_file) 
end 
Смежные вопросы