Jahn Schlosser
Jahn Schlosser

Reputation: 79

Refinerycms on Heroku not working with AmazonS3 bucket

I try to setup Amazon S3 support to store images in the cloud with refinerycms.

I created the bucket at https://console.aws.amazon.com/s3/

I named it like the app 'bee-barcelona' and it says it is in region US Standard

In ~/config/initializers/refinery/images.rb I entered all the data (where 'xxx? stands for the actual keys I entered:

# Configure S3 (you can also use ENV for this)
# The s3_backend setting by default defers to the core setting for this but can be set just for images.
config.s3_backend = Refinery::Core.s3_backend
config.s3_bucket_name = ENV['bee-barcelona']
config.s3_access_key_id = ENV['xxx']
config.s3_secret_access_key = ENV['xxx']
config.s3_region = ENV['xxx']

Then I applied the changes to heroku with:

heroku config:add S3_KEY=xxx S3_SECRET=xxx S3_BUCKET=bee-barcelona S3_REGION=us-standard

But still, in the app I only get: "Sorry, something wen wrong" when I try to upload.

What did I miss?

Upvotes: 1

Views: 312

Answers (2)

epicrato
epicrato

Reputation: 8428

The way I did it was as follows:

  • Create a bucket in region US-STANDARD!!!!!!!!!!
  • Did you see that? US-STANDARD, not oregon, not anywhere else.

  • Add gems to Gemfile

    gem "fog"
    gem "unf"
    gem "dragonfly-s3_data_store"
    
  • In config/application.rb

    config.assets.initialize_on_precompile = true
    
  • In config/environments/production.rb

    Refinery::Core.config.s3_backend = true
    
  • In config/environments/development.rb

    Refinery::Core.config.s3_backend = false
    
  • Configure S3 for heroku (production) and local storage for development. In config/initializers/refinery/core.rb

    if Rails.env.production?
      config.s3_backend = true
    else
      config.s3_backend = false
    end
    config.s3_bucket_name = ENV['S3_BUCKET']
    config.s3_region = ENV['S3_REGION']
    config.s3_access_key_id = ENV['S3_ACCESS_KEY']
    config.s3_secret_access_key = ENV['S3_SECRET_KEY']
    
  • Add variables to heroku:

    heroku config:add S3_ACCESS_KEY=xxxxxx S3_SECRET_KEY=xxxxxx S3_BUCKET=bucket-name-here S3_REGION=us-east-1
    

I had a lot of issues because I had before S3_REGION=us-standard. This is WRONG. Set your US-Standard bucket as shown:

S3_REGION=us-east-1

This worked flawlessly for me on Rails 4.2.1 and refinery 3.0.0. Also, make sure you are using the exact same names for the variables. Sometimes it says S3_KEY instead of S3_ACCESS_KEY or S3_SECRET instead of S3_SECRET_KEY. Just make sure you have the same ones in your files and your Heroku variables.

Upvotes: 0

Jahn Schlosser
Jahn Schlosser

Reputation: 79

What a sad error. I didn't think about that option till I went for a 10 km run…

I had the app set up to be "beekeeping" My bucket on Amazon was named "bee-barcelona"

I did register the correct bucket in the app. Still refinery tried to keep on going to another persons bucket, named "beekeeping". With my secret key there was no way my files would end up there.

I created a new app and a new bucket, all with crazy names, BUT! They are the same on AmazonS3 and GIT!!!

No it works like a charm.

What a very rare situation...

Upvotes: 1

Related Questions