Rails Asset Pipeline — не компилировать манифест

Я создаю свой блог, и его раздел администратора значительно отличается от остальной части сайта. Поэтому я решил создать отдельные манифесты в соответствии с тем, что я понимаю в документации The Asset Pipeline.

Проблема:

Раздел администратора работает, как и ожидалось, с правильно примененными стилями. Но в производстве это не так. Я запустил rake assets:precompile, и он генерирует только одну версию — application-[blah].js. а не admin_lite-[blah].js

Что я могу делать неправильно? Помощь приветствуется.

Дополнительная информация

  • приложение/активы/таблицы стилей/admin_lite.css
  • ‹%= stylesheet_link_tag "admin_lte", носитель: 'все' %> \
  • приложение/активы/javascripts/admin_lite.js
  • ‹%= javascript_include_tag "admin_lte" %>
  • Добавлен инициализатор (config/intilizers/assets.rb) Rails.application.config.assets.precompile += ['admin_lite.js', 'admin_lite.css']
  • запустил `RAILS_ENV bin/rake assets:precompile
  • Генерирует только что-то вроде applicaiton-[signature].js && application-[signature].css
  • Ссылки css и js в разделе администратора имеют вид /stylesheets/admin_lite.css /javascripts/admin_lite.css (не тот формат, который используется для вариантов application-*, которые имеют подпись).

Вывод css

<link href="/stylesheets/admin_lte.css" media="all" rel="stylesheet" />
<script src="/javascripts/admin_lte.js"></script>

Обновления

  • добавил config.assets.precompile += ['admin_lite.js', 'admin_lite.css'] в config/environments/production.rb (а также development.rb для проверки)
  • добавил config.assets.precompile += ['admin_lite.js', 'admin_lite.css'] к application.rb

без успеха

Исправить / Решено

Ошибка была опечаткой, когда я использовал неправильное имя файла, и поэтому он не был скомпилирован. Итак, если вы...

  • беги rake assets:precompile
  • application.css компилируется, но не ваш пользовательский манифест (например: admin.css)
  • Проверьте правописание
  • Я действительно хочу, чтобы это вызвало исключение.

person Ziyan Junaideen    schedule 07.07.2014    source источник
comment
Вы хотите добавить Rails.application.config.assets.precompile += ['admin_lite.js', 'admin_lite.css'] к config/environments/production.rb, это то, что рельсы будут вызывать при предварительной компиляции.   -  person j-dexx    schedule 07.07.2014
comment
Имеет смысл, позвольте мне попробовать. Я перешел по ссылке, которую я разместил о конвейере активов, в ней говорится, что необходимо интернализировать с именем assets.rb (необходимо обновить вопрос).   -  person Ziyan Junaideen    schedule 07.07.2014
comment
Нет, это не сработало. Я также добавил его в разработку и запустил прекомпиляцию, но есть только варианты приложений.   -  person Ziyan Junaideen    schedule 07.07.2014
comment
Если актив пропущен, рельсы могут отступить. В вашем production.rb есть строчка 'config.assets.compile=true'   -  person nil    schedule 07.07.2014
comment
Кроме того, я не знаю, как вы развертываете; но просто чтобы убедиться, перезапускаете ли вы приложение rails в производстве?   -  person nil    schedule 07.07.2014
comment
Это _lite или _lte? Ваш код, кажется, использует оба   -  person Frederick Cheung    schedule 07.07.2014
comment
@FrederickCheung - Ты мой ангел-хранитель. Это сработало, когда я изменил little на lte. Добавьте это как ответ, и я приму его. Большое спасибо   -  person Ziyan Junaideen    schedule 08.07.2014
comment
@RussellKompinski config.assets.compile = true действует как запасной вариант? Это означает, что если активы не скомпилированы, он будет использовать время выполнения для их компиляции? Спасибо за информацию   -  person Ziyan Junaideen    schedule 08.07.2014
comment
Да, это так, но после исследования я узнал, что лучше этого не делать, и вот почему: stackoverflow.com/questions/8821864/ - Похоже, я перестану это делать!   -  person nil    schedule 08.07.2014


Ответы (2)


Похоже, имя манифеста, который вы запрашиваете для предварительной компиляции, не соответствует настройке — попробуйте изменить lite на lte

person Frederick Cheung    schedule 07.07.2014

Я обнаружил (по крайней мере, с Rails 4.1.6), что расширение файла, используемое в config.assets.precompile, и javascript_include_tag имеют жизненно важное значение.

Недавно я добавил следующее в свой файл production.rb:

  config.assets.precompile += %w(google/infobox.js)

И в файле HAML, который будет использовать актив, который у меня был:

=javascript_include_tag "google/infobox"

Конечно, это прекрасно работает в режиме разработки!

Итак, я запускаю код в производство, и когда я запускаю rake assets:precompile на сервере, я вижу, что создается предварительно скомпилированный файл:

Writing public/assets/google/infobox-85c3151833c8f22f374f4fb25b7f917f.js

Потрясающий!

Но увы нет...

Короче говоря, мне пришлось явно добавить расширение ".js" в javascript_include_tag, чтобы оно выглядело так:

=javascript_include_tag "google/infobox.js"

Надеюсь, это сэкономит кому-то время в будущем.

Также надеюсь, что кто-то не наткнется на мой собственный ответ в следующий раз, когда это произойдет со мной, и я не могу вспомнить, почему это произошло.

person Darren Hicks    schedule 08.02.2015