Подтвердить что ты не робот

ActionView:: Template:: Error (960.css не предварительно скомпилирован)

У меня есть iframe, который отображает частичное и не является частью основного макета приложения или конвейера.

Я хотел бы включить некоторые таблицы стилей, однако я получаю эту ошибку:

 ActionView::Template::Error (960sm.css isn't precompiled):

Рельсы 3.1 Heroku

4b9b3361

Ответ 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.)