когда мне нужно добавить ресурс в config.assets.precompile, а когда нет? - PullRequest
1 голос
/ 01 февраля 2012

Меня немного смущает, когда мне нужно добавить актив к config.assets.precompile, а когда это не нужно.

(Возможно, моя проблема может быть связана с тем, что это приложение было перенесено с rails 2.x; в какой-то момент я собираюсь перестроить его с нуля как приложение 3.x, но не у меня еще нет на это времени.)

Вот моя проблема: у меня есть файлы .css и .js, которые не найдены звездочками, если я не добавлю их в config.assets.precompile в application.rb. Я не могу себе представить, что я должен делать это для каждого .js и .css, не так ли?

Например, один файл, с которым у меня возникла эта проблема, это app/assets/stylesheets/facybox.css.

application.css:

/*
 *= require_self
 *= require_directory .
*/

(да, require_directory вместо require_tree намеренно).

Я запускаю rake assets:precompile на моем сервере во время развертывания. В результате application.css содержит facybox.css.

facybox.css упоминается частично, как это:

<% content_for :header do %>
  <%= stylesheet_link_tag "facybox" %>
<% end %>

Но когда я перехожу на страницу с частичным, я получаю:

Sprockets::Helpers::RailsHelper::AssetPaths::AssetNotPrecompiledError in Admin#compositions
Showing /srv/zmx/releases/5420c4dde6fbec53d78cffe78396085f263ed039/app/views/shared/_preview_assets.erb where line #6 raised:
facybox.css isn't precompiled

, что, как я полагаю, связано с тем, что sprockets ищет копию файла с отпечатками пальцев, которой не существует , если я не добавлю ее в config.assets.precompile. Тогда все в порядке.

Может кто-нибудь объяснить?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Правила прекомпиляции просты:

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

Если на ресурс нужно ссылаться непосредственно в представлении Rails, вам НУЖНО добавить его (и вы должны удалить его из любых манифестов).

1 голос
/ 01 февраля 2012

Как вы сказали сами, содержимое facybox.css уже включено в ваш application.css.

Это означает, что вы можете просто удалить stylesheet_link_tag из вашего частичного, а также из любых других мест, где выиспользуйте facybox.css.Вам придется сделать то же самое для всех других таблиц стилей, которые вы уже включили в application.css

.
...