First of all, according to this answer, the :cache => true
option on stylesheet_link_tag
and javascript_include_tag
doesn't work on Heroku. Is this true? I've found :cache => true
to work occasionally, but not always (weird!)
Also, what's the best solution here? Ideally it would seamlessly combine and minify all CSS / JS. Heroku Asset Packager claims to do this -- are there better options?
The project name says it all:
http://github.com/amasses/heroku_asset_packager
Here are the config options to compress your assets.
http://guides.rubyonrails.org/asset_pipeline.html#customizing-the-pipeline
There are probably various ways to do this, but what works for me is to minify before pushing. Then I use a subtree to keep my build files separate from the "source" files. So, for example, if you build to a folder called "dist", you can push to a subtree called heroku/master like this:
Just don't forget to ensure that the dist folder is not ignored (it often is, by default) - so edit your .gitignore file accordingly.
The --prefix command ensures that the dist folder effectively becomes the "root" folder from the point of view of that branch.
It's a different way to manage your CSS/Javascript but you may want to check out the Rails plugin shoebox.
Shoebox can do combining, minifying, and caching.
I'm using Jammit on Heroku. Works Great. You can locally build your assets and check in to heroku. use
the current version 0.5.1 has issues working on heroku but you can install the fixed version from git://github.com/documentcloud/jammit.git
If you are using Rails 3, specify the below in your bundler Gemfile:
For Rails 2.*
Good Luck.
I've found that adding a git pre–commit hook which compiles and packs assets, then adds them to the current commit comes in handy in this case.
Mine using Jammit looks something like this (in
.git/hooks/pre-commit
):Like this all your assets will be packed for you and you don't have to worry anymore about it.