Justin
Justin

Reputation: 4940

Trouble uploading files to Amazon s3 in development

Able to upload files to Amazon s3 in my production environment with Heroku, but unable to do this in my development environment. Here is how the situation looks currently

Development.rb

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']
  }
}

After following the advice of this S.O. Post, I created a file application.yml in my config directory with the following code:

AWS_ACCESS_KEY_ID: "***"
AWS_SECRET_ACCESS_KEY: "***"
AWS_BUCKET: "themoderntrunk"

I didn't change my design model though

has_attached_file :photo, :styles => { :thumbnail => "80x80#", 
                                       :small => "150x150>"
                                     }

When I'm uploading file's now, i get this error

missing required :bucket option

Many people I've seen had this same problem, but none of the answers have been able to solve my problem. Any guidance would be truly appreciated. Thanks.

Upvotes: 0

Views: 472

Answers (1)

zeantsoi
zeantsoi

Reputation: 26193

Allegorically, this particular issue has commonly been resolved using Fog, Ruby's canonical cloud services library.

# Gemfile
gem 'fog'

Run bundle install, then modify your configuration file as follows:

# config/environments/development.rb
Paperclip::Attachment.default_options.merge!(
  :storage => :fog,
  :fog_credentials => {
    :provider => 'AWS',
    :aws_access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
  },
  :fog_directory => ENV['AWS_BUCKET'],
  :bucket => ENV['AWS_BUCKET']
)

Restart your server to reload the environment – uploads should work.

UPDATE:

Upon a rereading of your question, I noticed that you're to passing an environment global named ENV['S3_BUCKET_NAME'], but the variable you should actually pass is named ENV['AWS_BUCKET']. I suspect this is why the missing required :bucket option was being thrown. Renaming the variable may resolve your original issue:

# config/environments/development.rb
config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => ENV['AWS_BUCKET'], # Matches global declaration in `application.yml`
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

Upvotes: 1

Related Questions