sk87
sk87

Reputation: 35

Heroku and carrierwave don't load my s3 configuration

I have an application on Heroku that uses the Carrierwave gem to upload images to S3.

I have set the s3 configuration in an initializer called carrierwave.rb

CarrierWave.configure do |config|
  config.s3_access_key_id = 'XXXXXXXXXXXXXXXXXXXX'
  config.s3_secret_access_key = 'XXXXXXXXXXXXXXXXX'
  config.s3_bucket = 'XXXXX'
  config.storage = :s3
end

This works fine in development on my local machine, however once I deploy to Heroku I get the following error

A Errno::EACCES occurred in events#update:

Permission denied - /app/public/uploads
/usr/ruby1.8.7/lib/ruby/1.8/fileutils.rb:243:in `mkdir'

Obviously it's trying to write to the heroku server which is read only and not picking up my s3 settings.

Does anyone know how I can get heroku to send my files to s3?

Upvotes: 3

Views: 3629

Answers (2)

John Goodman
John Goodman

Reputation: 1098

From CarrierWave wikki:

Heroku has a read-only filesystem, so uploads must be stored on S3 and cannot be cached in the public directory.

You can work around this by setting the cache_dir in your Uploader classes to the tmp directory:

Check out https://github.com/jnicklas/carrierwave/wiki and scroll to the bottom section labeled "CarrierWave on Heroku" to see how they set this up. Hope this helps someone.

Upvotes: 7

John Beynon
John Beynon

Reputation: 37507

Have you looked at this demo app.

In particular the uploaded class here

Upvotes: 6

Related Questions