Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWS S3, Paperclip missing required :bucket option

I'm trying to use Paperclip and SWS S3 on Heroku to let users upload images.

I do not have my credentials stored in a yml file. I've followed the instructions on the Heroku page: https://devcenter.heroku.com/articles/paperclip-s3

But, when I try to run my app and upload an image I'm getting this message:

missing required :bucket option
Rails.root: /Users/scottsipiora/Sites/clycss

Application Trace | Framework Trace | Full Trace
app/controllers/instructors_controller.rb:63:in `block in update'
app/controllers/instructors_controller.rb:62:in `update'

The instructions don't mention anything about making a change in my controller. I have seen some examples telling me to put in something like:

In my model I have the following code:

class Instructor < ActiveRecord::Base
  attr_accessible :bio, :hometown, :name, :school, :sort_order, :started_sailing, :started_teaching, :photo
  has_attached_file :photo, styles: {
    thumb: '100x100>',
    square: '200x200#',
    medium: '300x300>'
  }
end

In my production.rb I have (obviously replacing my real credentials with mock credentials):

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

I've also created separate buckets for Production and Dev so things are cleaner.

Any ideas? I'm relatively new and this should be pretty easy.

Thanks in advance.

like image 625
Scott S. Avatar asked Nov 18 '12 20:11

Scott S.


Video Answer


2 Answers

I think you may have made the same mistake I did. In your production.rb file, do not edit the text to add your specific S3 keys. Just copy-paste the text directly as is listed in the tutorial.

#production.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET'],
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

Then, set the environmental variables AWS_BUCKET, AWS_ACCESS_KEY_ID, and AWS_SECRET_ACCESS_KEY as described by the author of the dev center article.

like image 132
rewon Avatar answered Oct 05 '22 05:10

rewon


Do heroku config to check your environment variables.

Normally they are all caps and have underbars instead of spaces.

If it is not set, you should set the environment variable with

heroku config:add BUCKET_NAME=my_bucket_name

Update your code:

:bucket => ENV['BUCKET_NAME'],

Heroku reference

like image 30
B Seven Avatar answered Oct 05 '22 06:10

B Seven