активы рейка: прекомпиляция героку не подхватывается

Ааа, у меня болит голова от этой штуки assets:precompile. Когда я впервые отправил приложение на героку, я предварительно скомпилировал их локально. Все это было хорошо, но тогда он не улавливал никаких изменений в файлах css, которые я сделал после этого в процессе разработки, потому что он обслуживал предварительно скомпилированные активы. Так что теперь, для визуальных вещей, мне пришлось сделать rake assets:clean. Я внес изменения, которые хотел применить локально, без проблем. Затем я снова предварительно скомпилировал активы и отправил изменения в heroku, но теперь кажется, что он даже не увидит мои активы. Страница просто белая с вещами на ней, без какого-либо стиля.

Пожалуйста помоги!


person Admir Huric    schedule 27.10.2013    source источник


Ответы (1)


У вас проблемы с двумя частями системы героку:


Отпечатки активов сильный>

Снятие отпечатков активов в основном добавляет хэш MD5 в конец ваших файлов активов, чтобы сохранить их уникальными и зависимыми от любых отношений, которые они имеют в файле. Это важно, потому что каждый раз, когда вы компилируете свои ресурсы, они генерируют эти новые имена файлов, что приведет к беспорядку в стандартном CSS.

Вам нужно сделать это со всеми вашими ссылками на активы в вашем CSS:

Измените файлы CSS на .css.scss

В отличие от статического CSS, SCSS компилируется динамически и может анализировать код ruby. Это означает, что вы можете ссылаться на свои активы следующим образом:

background-url: asset_url('/nav_bar/nagivgation_bg.png');

Сделайте это для своих файлов CSS, и ссылки должны быть в порядке.


Обслуживание статических ресурсов

Heroku нужно, чтобы вы запускали статические ресурсы в Rails. Это очень просто сделать:

#/config/environments/production.rb
config.serve_static_assets = true

Обновить

Вот некоторый живой код, демонстрирующий, куда включать динамические помощники в файле .scss:

.confirmation .action_bar a.confirm {
        color: #fff;
        background: asset_url('modals/confirm_button/bg.png') top repeat-x;
        position: relative;
        margin: 0 0 0 7px;
}
person Richard Peck    schedule 27.10.2013
comment
Извините, так как я немного новичок во всех активах на героку. Мои файлы css уже имеют формат .css.scss. Куда мне поместить этот код: background-url: assets_path('/nav_bar/nagivgation_bg.png'); - person Admir Huric; 27.10.2013
comment
Нет проблем - я просто выложил ванильный ответ, потому что не знал, сколько у вас опыта :) Материалы assets_path являются примером того, как вы можете использовать динамические пути в .scss -> на самом деле это должен быть assets_url, и в основном замените ЛЮБОЙ URL(), который у вас есть (поскольку они будут ссылаться только на статические файлы). Я обновил свой ответ живым примером - person Richard Peck; 27.10.2013
comment
Я не думаю, что у меня есть какие-либо URL-адреса в файлах scss. - person Admir Huric; 27.10.2013