Need help with jammit-s3?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

127 Stars 31 Forks MIT License 62 Commits 10 Opened issues


Extensions so you can use jammit with s3/cloudfront for your Rails app

Services available


Need anything else?

Contributors list

Jammit S3


Jammit S3 is a jammit wrapper that provides appropriate hooks so you can easily deploy your assets to s3/cloudfront

It's especially great for Heroku user who use generated assets such as coffee-script and sass. jammit-s3 includes a script you can use as a hook to recompile and upload all your assets.


To install jammit-s3, just use:

gem install jammit-s3

If you are using Rails3, add it to your project's

gem 'jammit-s3'

Jammit S3 already has a gem dependency for jammit, so I'd recommend removing any existing

gem 'jammit'
references from your Gemfile.


Within your

, just add a toplevel key called
that contains the bucketname you want to use. If jammit-s3 doesn't find the bucket, it will try to create it. Bucketnames need to be globally unique. Learn more about bucketnames here
s3_bucket: my-awesome-jammit-bucket


To deploy your files to s3, just the jammit-s3 command at your project's root.


If using it in the context of your Rails3 app, I'd recommend using

bundle exec
bundle exec jammit-s3

Saving Authentication Info

Set your authenticaton information within

s3_access_key_id: 03HDMNF59CWZ2J24T702
s3_secret_access_key: 1TzRlDmuH8DoOlJ2tlwW8qx+i+Pfe0jzIouWI2BL

Replace these with your own access keys, found here.

As you probably don't want to check this data into source control, I'd recommend you just set it to an environment variable on your local box, and use ERB


You can then set these env variables in your .bash_profile

Folders to upload

By default, jammit-s3 will upload your configured asset directly, along with public/images. However you can customize this using the

setting, which should be a list of file globs.
# adds image uploads
  - public/css/images/**

Setting permissions on uploaded s3 objects

By default, jammit-s3 uses the permission setting found on the s3 bucket. However, you can override this with the config:

s3_permission: public_read

Valid permission options are:

: Owner gets FULL_CONTROL. No one else has any access rights. This is the default.

: Owner gets FULL_CONTROL and the anonymous principal is granted READ access. If this policy is used on an object, it can be read from a browser with no authentication.

: Owner gets FULL_CONTROL, the anonymous principal is granted READ and WRITE access. This is a useful policy to apply to a bucket, if you intend for any anonymous user to PUT objects into the bucket.

: - Owner gets FULL_CONTROL, and any principal authenticated as a registered Amazon S3 user is granted READ access.

Using CloudFront

For this to work you need to make sure you have the CloudFront enabled via you Amazon acccount page. Go here: and click "Sign Up"

To use CloudFront, simply add the following settings to config/assets.yml:

use_cloudfront: on
cloudfront_dist_id: XXXXXXXXXXXXXX

Please note that cloudfrontdistid is not the same as the CloudFront domain name. Inside CloudFront management console select the distribution, and you will see Distribution ID and Domain Name values.

This will use the CloudFront domain name for your assets instead of serving them from the (slow) S3 bucket.

Known issues with CloudFront invalidation

  1. It may reportedly take up to 15 minutes to invalidate all the CloudFront caches around the globe (and Amazon charges for more than a certain number of invalidations per month).

  2. It's non-atomic from the perspective of the end-user: They may get an older version of the site with a newer version of the JavaScript and CSS, or vice versa.

  3. It doesn't play nicely with aggressive HTTP caching. For example, once I serve a script or a stylesheet, I would like it to be cached indefinitely with no more round trips to see whether it is valid.

Given these constraints, there's still an important need for some kind of content-based hashing. Done right, this assures that all files can be cached indefinitely, and the user will always get matched HTML/JS/CSS files. (This currently is in the works).

Bugs / Feature Requests

To suggest a feature or report a bug:

Jammit Home Page

Jammit S3 is a simple wrapper around Jammit. To view the original Jammit docs, use

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.