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 an开发者_如何转开发d minify all CSS / JS. Heroku Asset Packager claims to do this -- are there better options?
I'm using Jammit on Heroku. Works Great. You can locally build your assets and check in to heroku. use
jammit --force
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:
gem "jammit", :git => "git://github.com/documentcloud/jammit.git"
For Rails 2.*
config.gem "jammit", :source => "git://github.com/documentcloud/jammit.git"
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
):
jammit
rake barista:brew
git add public/assets/*
git add public/javascripts/*
Like this all your assets will be packed for you and you don't have to worry anymore about it.
GitHub has a good answer for this, and I'm sure you could modify Heroku's deployment scripts to integrate:
http://github.com/blog/551-optimizing-asset-bundling-and-serving-with-rails
I haven't tried it on heroku yet, but Sprockets might be good for that. Also, in the past, I've had more luck with
:cache => 'all.css'
:cache => 'all.js'
instead of 'true'
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.
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
config.assets.css_compressor = :yui
config.assets.js_compressor = :uglifier
config.assets.compress = true
gem 'uglifier'
gem 'yui-compressor'
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:
git subtree push --prefix dist heroku master
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.
精彩评论