2014-02-13 3 views
2

Я следую за курсом One Month Rails, и я застреваю при загрузке изображения на сервер AWS через Heroku. Мой Github Папка: https://github.com/phanatuan/pinterestingArgumentError (отсутствует обязательно: опция в ковше):

Ошибка в журнале Heroku является:

"ArgumentError (missing required :bucket option): 
app/controllers/pins_controller.rb:31:in `block in create' 
app/controllers/pins_controller.rb:30:in `create' " 

Я понимаю, что это ошибка многих людей. Однако, когда я просматривал другие вопросы и ответы Stackoverflow, я не мог найти решения.

Большое спасибо за вашу помощь

Туан

+0

http: // stackoverflow.com/questions/13444264/aws-s3-paperclip-missing-required-bucket-option – usha

+0

Я столкнулся с этим вопросом, но решение для меня не работает – phanatuan

ответ

1

Попробуйте явного определения ведро в вашей ассоциации has_attached_file

class Pin < ActiveRecord::Base 
    belongs_to :user 

    has_attached_file :image, 
      :style => { :medium => "300x300>", :thumb => "100x100>" }, 
      :storage => :s3, 
      :bucket => ENV['MY_BUCKET_NAME'] 
    validates :image, presence: true 
    validates :description, presence: true 
end 

И еще более явно, определить все ваши конфиги рядный

class Pin < ActiveRecord::Base 
    belongs_to :user 

    has_attached_file :image, 
      :style => { :medium => "300x300>", :thumb => "100x100>" }, 
      :storage => :s3, 
      :bucket => ENV['MY_BUCKET_NAME'], 
      :s3_credentials => { 
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
       }, 
       :s3_permissions => 'private', 
       :url => ":s3_domain_url" 
    validates :image, presence: true 
    validates :description, presence: true 
end 

Я использую ENV vars в этом e xample, но вы можете явно указать свои значения конфигурации. Начните с этого момента, а затем вернитесь к установке конфигураций в инициализатор.

+0

Просто не добавляйте файл конфигурации с секретными ключами и паролями в ваш контроль версий. Я использую драгоценный камень dotenv, чтобы безболезненно добавлять переменные среды во время разработки. – Nathan

2

В настоящее время я беру учебник OneMonth Rails, и для меня это была большая головная боль!

Вместо того, чтобы следовать, что OMRails говорит вам, что:

$ heroku config:set AWS_BUCKET=BUCKET_NAME_VALUE 

Используйте вместо этого:

$ heroku config:set S3_BUCKET_NAME=BUCKET_NAME_VALUE 

А затем обернуть его с:

$ heroku run rake db:migrate 
$ git push heroku master 

Если у вас есть уже установили «AWS_ACCESS_KEY_ID» и ваш «AWS_SECRET_ACCESS_KEY», нет необходимости повторять или изменять их.

Конечный код должен выглядеть следующим образом:

config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
     :bucket => ENV['S3_BUCKET_NAME'], 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    } 
1

У меня была та же проблема, и она была установлена ​​командой:

$ heroku config:set S3_BUCKET_NAME=BUCKET_NAME_VALUE 

убедитесь, что имя установлено значение «S3 "в вашем файле production.rb:

# Sets Paperclip to upload images to Amazon S3 
    config.paperclip_defaults = { 
    :storage => :s3, 
    :s3_credentials => { 
     :bucket => ENV['S3_BUCKET_NAME'], 
     :access_key_id => ENV['AWS_ACCESS_KEY_ID'], 
     :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'] 
    } 
    } 

У меня тоже была настоящая головная боль.

ли выше, затем добавить и фиксации и нажать на мерзавца, а затем запустить

git push heroku master 

Тогда вы будете надеяться, будет хорошо идти. Я не думаю, что вам нужно сделать

heroku run rake db:migrate 

В этом случае, но я, возможно, ошибаюсь. Я тоже новичок!

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