ActionView:: Template:: Error (960.css не предварительно скомпилирован)
У меня есть iframe, который отображает частичное и не является частью основного макета приложения или конвейера.
Я хотел бы включить некоторые таблицы стилей, однако я получаю эту ошибку:
ActionView::Template::Error (960sm.css isn't precompiled):
Рельсы 3.1
Heroku
Ответы
Ответ 1
Таблицы стилей, которые не включены в манифест (прямо по имени или косвенно через require_tree), не предварительно скомпилированы, поэтому не будут доступны в процессе производства.
Вам нужно добавить лист в список элементов для предварительной компиляции в среде application.rb.
config.assets.precompile += ['960sm.css']
И затем получите доступ к нему в представлении:
stylesheet_link_tag('960sm')
Ответ 2
Вместо того, чтобы управлять списком файлов CSS, вы можете просто настроить расширение, добавив .scss к имени файла.
Следовательно, 960sm.css станет 960sm.css.scss.
Это не должно ломать ничего, поскольку действительный CSS является действительным SCSS.
Ответ 3
Если у вас много автономных активов, вместо добавления каждого из них в список, например
config.assets.precompile += ['960sm.css']
вы можете просто прекомпилировать все, например:
def precompile?(path)
%w(app lib vendor).each do |asset_root|
assets_path = Rails.root.join(asset_root, 'assets').to_path
return true if path.starts_with?(assets_path)
end
false
end
# Precompile all assets under app/assets (unless they start with _)
Rails.application.config.assets.precompile << proc do |name, path|
starts_with_underscore = name.split('/').last.starts_with?('_')
unless starts_with_underscore
path = Rails.application.assets.resolve(name).to_path unless path # Rails 4 passes path; Rails 3 doesn't
precompile?(path)
end
end
(На основе кода в Rails Guide.)