Прекомпиляция актива отсутствует автономный Javascript / CSS - PullRequest
6 голосов
/ 31 декабря 2011

У меня такое подлое чувство, что я упускаю что-то очевидное:

Я запустил

RAILS_ENV=production bundle exec rake assets:precompile

, чтобы предварительно скомпилировать свои активы перед тем, как отправлять их в Heroku.Просмотр /public/assets показывает, что application.js и application.css манифесты успешно скомпилированы, но ни один из моих автономных файлов не скомпилирован предварительно :

admin.js.coffee
blog.js.coffee.erb
[ ... several more similarly named ... ]
twitter.js.coffee.erb

и

admin.css.less
home.css.less
public.css.less

все отсутствуют в /public/assets.

Я думал, что Rails прекомпилирует файлы application.js / .css, плюс все, что не заканчивается на js / css:

Сопоставление по умолчанию для компиляции файлов включает application.js, application.css и все файлы, которые не заканчиваются на js или css:

[ /\w+\.(?!js|css).+/, /application.(css|js)$/ ]

from: http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

Я не хочу обновлять config.assets.precompile вручную каждый раз, когда меняется имя файла ресурса.Мне не хватает чего-то, что заставит Rails прекомпилировать эти ресурсы?

Обновление

Основываясь на ответе @Richard Hulse ниже, я проверил это, создав отдельный файл манифеста для отдельного актива (т.е. япереименовано twitter.js.coffee.erb в twitter-include.js.coffee.erb и добавлено twitter.js с одним //= require извлечением переименованного оригинала). Кажется, это работает.

Должен быть более чистый способ, чем этот , и кажется, что противоречит руководству Rails , указанному выше.В руководстве говорится, что единственными файлами, которые не будут скомпилированы, являются файлы .js или .css , а не с именем application.Я вижу только то, что only .js или .css компилируется напрямую (т.е. не через манифест) - ничего больше.

1 Ответ

5 голосов
/ 31 декабря 2011

Две вещи:

Если эти файлы включены в манифесты приложения, они включаются в файлы приложения сайта.

В обоих манифестах приложения должна быть строка: require_tree, который автоматически подберет для вас все активы.Это в этих файлах?

Редактировать в ответ на редактирование:

То, как я бы это структурировал, имеет два набора манифестов.Стандартные (application.css / .js) предназначены для общественности.Администраторский набор предназначен для администраторских страниц.Включите все, что вам нужно, в манифесты admin.js / .css и добавьте эти файлы в массив прекомпиляции:

config.assets.precompile += ['admin.js', 'admin.css']

Это позволит вам делиться кодом между двумя группами.Например, вы можете включить jquery в оба, но jquery_ujs только в admin.В макете вашего административного раздела просто включите манифесты администратора вместо манифестов приложения.

На практике вы будете добавлять новые файлы в приложение или административные манифесты при разработке сайта, и вам не придется изменять конфигурацию прекомпиляции.

Как только вы дойдете до точкидобавление множества ресурсов, раздела администратора и т. д. ожидается, что все станет более сложным, и вам необходимо четко указать, что входит в манифесты и порядок (в отличие от require_tree).

...