Лучший способ комбинировать и минимизировать JS/CSS на Heroku

Прежде всего, согласно этот ответ, опция :cache => true для stylesheet_link_tag и javascript_include_tag не работает на Heroku. Это правда? Я обнаружил, что :cache => true иногда работает, но не всегда (странно!)

Кроме того, какое лучшее решение здесь? В идеале он будет легко комбинировать и минимизировать все CSS/JS. Heroku Asset Packager утверждает, что делает это — есть ли варианты получше?


person Tom Lehman    schedule 11.12.2009    source источник


Ответы (8)


Я использую Jammit на Heroku. Работает отлично. Вы можете локально создавать свои активы и регистрироваться на героку. использовать

jammit --force

в текущей версии 0.5.1 есть проблемы с работой на героку, но вы можете установить исправленную версию с git://github.com/documentcloud/jammit.git

Если вы используете Rails 3, укажите в Gemfile вашего сборщика следующее:

gem "jammit", :git => "git://github.com/documentcloud/jammit.git"

Для рельсов 2.*

config.gem "jammit", :source => "git://github.com/documentcloud/jammit.git"

Удачи.

person Community    schedule 10.09.2010

Я обнаружил, что добавление хука git pre-commit, который компилирует и упаковывает ресурсы, а затем добавляет их в текущий коммит, в этом случае пригодится.

Мой с использованием Jammit выглядит примерно так (в .git/hooks/pre-commit):

jammit
rake barista:brew
git add public/assets/*
git add public/javascripts/*

Таким образом, все ваши активы будут упакованы для вас, и вам больше не придется об этом беспокоиться.

person polarblau    schedule 11.04.2011

У GitHub есть хороший ответ на этот вопрос, и я уверен, что вы могли бы изменить сценарии развертывания Heroku для интеграции:

http://github.com/blog/551-optimizing-asset-bundling-and-serving-with-rails

person Josh Delsman    schedule 06.02.2010
comment
Сценарий развертывания Heroku — git push heroku. Не так много, чтобы изменить. - person yfeldblum; 12.11.2010

Я еще не пробовал это на героку, но Sprockets может подойти для этого. Кроме того, в прошлом мне больше везло с

:cache => 'all.css'
:cache => 'all.js'

вместо "правда"

person Jerry Cheung    schedule 21.01.2010
comment
Убедитесь, что вы проверили github.com/jeffrydegrande/sprockets_on_heroku, если хотите использовать Sprockets. На Sprockets определенно стоит обратить внимание, так как он будет по умолчанию включен в Rails 3.1 (еще не уверен, есть ли он в Rails 3). - person webmat; 10.05.2011

Это другой способ управления вашим CSS/Javascript, но вы можете попробовать плагин Rails коробка для обуви.

Shoebox может выполнять объединение, минимизацию и кэширование.

person David Dollar    schedule 21.01.2010

Название проекта говорит само за себя:

http://github.com/amasses/heroku_asset_packager

person databyte    schedule 10.02.2010
comment
Но это помещает упакованные активы в /tmp, что, согласно docs.heroku.com/constraints, не обязательно задерживаться между запросами - person Tom Lehman; 10.02.2010
comment
Вы пробовали Джаммит? documentcloud.github.com/jammit Я прочитал несколько коммитов из других общедоступных проектов, которые перешли на это, хотя я не пробовал сам. Я должен буду проверить это сам в ближайшее время ... не выбирайте предварительную компиляцию, пусть драгоценный камень скомпилирует ресурсы, а затем очистит все файлы из-под него и посмотрите, перекомпилирует ли он ресурсы снова. Я не читал источник Jammit, чтобы подтвердить это, но попробовать стоит, если вы не нашли что-то еще. - person databyte; 12.02.2010

Вот параметры конфигурации для сжатия ваших активов.

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'
person Chloe    schedule 06.03.2014

Вероятно, есть разные способы сделать это, но для меня работает минимизация перед отправкой. Затем я использую поддерево, чтобы хранить файлы сборки отдельно от «исходных» файлов. Так, например, если вы создаете папку с именем «dist», вы можете отправить ее в поддерево с именем heroku/master следующим образом:

git subtree push --prefix dist heroku master

Просто не забудьте убедиться, что папка dist не игнорируется (часто это происходит по умолчанию), поэтому отредактируйте файл .gitignore соответствующим образом.

Команда --prefix гарантирует, что папка dist фактически станет «корневой» папкой с точки зрения этой ветки.

person Anselan    schedule 05.09.2015