Лучший способ объединить и минимизировать JS/CSS на Heroku
Прежде всего, в соответствии с этим ответом параметр :cache => true
на stylesheet_link_tag
и javascript_include_tag
не работает на Heroku. Это правда? Я нашел :cache => true
для работы иногда, но не всегда (странно!)
Кроме того, какое лучшее решение здесь? В идеале он будет легко комбинировать и минимизировать все CSS/JS. Heroku Asset Packager утверждает, что это - лучшие варианты?
Ответы
Ответ 1
Я использую Jammit на Heroku. Прекрасно работает. Вы можете локально построить свои активы и зарегистрироваться в герою. использовать
jammit --force
текущая версия 0.5.1 имеет проблемы, связанные с heroku, но вы можете установить исправленную версию из git://github.com/documentcloud/jammit.git
Если вы используете Rails 3, укажите ниже в своем Gemfile поставщика:
gem "jammit", :git => "git://github.com/documentcloud/jammit.git"
Для Rails 2. *
config.gem "jammit", :source => "git://github.com/documentcloud/jammit.git"
Удачи.
Ответ 2
Я обнаружил, что добавление крюка git pre-commit, который компилирует и упаковывает активы, а затем добавляет их в текущую фиксацию, пригодится в этом случае.
Шахта с использованием Jammit выглядит примерно так (в .git/hooks/pre-commit
):
jammit
rake barista:brew
git add public/assets/*
git add public/javascripts/*
Как и все ваши активы будут упакованы для вас, и вам больше не придется беспокоиться об этом.
Ответ 3
GitHub имеет хороший ответ для этого, и я уверен, что вы можете изменить сценарии развертывания Heroku для интеграции:
http://github.com/blog/551-optimizing-asset-bundling-and-serving-with-rails
Ответ 4
Я еще не пробовал это на геройку, но Sprockets может быть для этого полезен. Кроме того, в прошлом мне повезло с
:cache => 'all.css'
:cache => 'all.js'
вместо "true"
Ответ 5
Это другой способ управления вашим CSS/Javascript, но вы можете проверить плагин Rails shoebox.
Shoebox может комбинировать, минимизировать и кэшировать.
Ответ 6
Название проекта говорит все:
http://github.com/amasses/heroku_asset_packager
Ответ 7
Вот параметры конфигурации для сжатия ваших активов.
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'
Ответ 8
Есть, вероятно, различные способы сделать это, но то, что работает для меня, - это минимизировать перед нажатием. Затем я использую поддерево, чтобы мои файлы сборки были отделены от "исходных" файлов. Например, если вы создаете папку с именем "dist", вы можете нажать на поддерево, называемое heroku/master, как это:
git subtree push --prefix dist heroku master
Не забудьте гарантировать, что папка dist не будет проигнорирована (часто это по умолчанию) - поэтому отредактируйте файл .gitignore соответственно.
Команда -prefix гарантирует, что папка dist фактически станет "корневой" папкой с точки зрения этой ветки.