Carrierwave AWS Storage
Use the officially supported AWS-SDK library for S3 storage rather than relying on fog. There are several things going for it:
- Full featured, it supports more of the API than Fog
- Significantly smaller footprint
- Fewer dependencies
- Clear documentation
Here is a simple comparison table [07/17/2013]
| Library | Disk Space | Lines of Code | Boot Time | Runtime Deps | Develop Deps |
|---|---|---|---|---|---|
| fog | 28.0M | 133469 | 0.693 | 9 | 11 |
| aws-sdk | 5.4M | 90290 | 0.098 | 3 | 8 |
Installation
Add this line to your application's Gemfile:
gem 'carrierwave-aws'
Usage
Configure and use it just like you would Fog. The only notable difference is
the use of aws_bucket instead of fog_directory, and aws_acl instead of
fog_public.
CarrierWave.configure do |config|
config.storage = :aws
config.aws_bucket = ENV['S3_BUCKET_NAME']
config.aws_acl = :public_read
config.asset_host = 'http://example.com'
config.aws_authenticated_url_expiration = 60 * 60 * 24 * 365
config.aws_credentials = {
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
}
end
If you want to supply your own AWS configuration, put it inside
config.aws_credentials like this:
config.aws_credentials = {
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
config: AWS.config()
}
AWS.config will return AWS::Core::Configuration object which is used
through aws-sdk gem. Browse Amazon docs
for additional info. For example, if you want to turn off SSL for your asset
URLs, you could simply set AWS.config(use_ssl: false).
Contributing
In order to run the integration specs you will need to configure some
environment variables. A sample file is provided as .env.sample. Copy it over
and plug in the appropriate values.
cp .env.sample .env
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request



