Rails 3.1.0 ActionView:: Template:: Ошибка (application.css не предварительно скомпилирован)

Я сделал базовое приложение rails с простым контроллером страниц с функцией индекса, и когда я загружаю страницу, которую я получаю:

ActionView::Template::Error (application.css isn't precompiled):
    2: <html>
    3: <head>
    4:   <title>Demo</title>
    5:   <%= stylesheet_link_tag    "application" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8: </head>
  app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__43625033_88530400'

Gemfile

source 'http://rubygems.org'

gem 'rails', '3.1.0'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

gem 'execjs'
gem 'therubyracer'

# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

gem 'jquery-rails'

# Use unicorn as the web server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
# gem 'ruby-debug19', :require => 'ruby-debug'

group :test do
  # Pretty printed test output
  gem 'turn', :require => false
end

Ответ 1

По умолчанию Rails предполагает, что ваши файлы предварительно скомпилированы в производственной среде, если вы хотите использовать компиляцию в реальном времени (компилировать свои ресурсы во время выполнения) в процессе производства, вы должны установить для параметра config.assets.compile значение true.

# config/environments/production.rb
...
config.assets.compile = true
...

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

Если для параметра config.assets.compile установлено значение false и отсутствуют прекомпилированные файлы, вы получите "AssetNoPrecompiledError", указывающий имя отсутствующего файла.

Ответ 2

Вы получите лучшую производительность в производстве, если вы установите config.assets.compile в false в production.rb и прекомпилируете свои активы. Вы можете предварительно скомпилировать эту команду:

bundle exec rake assets:precompile

Если вы используете Capistrano, версия 2.8.0 имеет рецепт для обработки этого во время развертывания. Для получения дополнительной информации см. Раздел "В процессе производства" Руководства по управлению активами: http://guides.rubyonrails.org/asset_pipeline.html

Ответ 3

ОК - У меня была такая же проблема. Я не хотел использовать "config.assets.compile = true" - мне пришлось добавить все мои файлы .css в список в config/environment/production.rb:

config.assets.precompile += %w( carts.css )

Затем мне пришлось создать (и позже удалить) tmp/restart.txt

Я постоянно использовал помощник stylesheet_link_tag, поэтому я нашел все дополнительные файлы css, которые мне нужно было добавить:

find . \( -type f -o -type l \) -exec grep stylesheet_link_tag {} /dev/null \;

Ответ 4

Быстрое исправление для пользователя capistrano заключается в том, чтобы поместить эту строку в Capfile

# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'

Ответ 5

Для всех тех, кто читает это, но не имеет проблем с application.css и вместо этого с их пользовательскими классами CSS, например. admin.css, base.css и т.д.

Решение должно использоваться, как указано

bundle exec rake assets:precompile

И в стилях ссылки ссылаются только на ссылку application.css

<%= stylesheet_link_tag    "application", :media => "all" %>

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

Ответ 6

У меня была такая же ошибка в моей среде разработки. В конце концов, все, что мне нужно было сделать, чтобы исправить это, было добавить:

config.assets.manifest = Rails.root.join("public/assets")

в файл config/environment/development.rb, и он исправил его. Моя окончательная конфигурация в разработке, относящаяся к активам, выглядит следующим образом:

config.assets.compress = false  
config.assets.precompile += %w[bootstrap-alerts.js] #Lots of other space separated files
config.assets.compile = false
config.assets.digest = true
config.assets.manifest = Rails.root.join("public/assets")
config.assets.debug = true

Ответ 7

У меня также была эта проблема, когда попытка запуска в производстве без предварительной компиляции все равно выдавала бы не предварительно скомпилированные ошибки. Мне пришлось изменить, какая строка была прокомментирована application.rb:

  # If you precompile assets before deploying to production, use this line
  # Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  Bundler.require(:default, :assets, Rails.env)

Ответ 8

Здесь быстрое исправление:

Если вы используете capistrano, добавьте это в свой deploy.rb:

after 'deploy:update_code' do
  run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
end

развертывание крышки

Ответ 9

Сегодня я столкнулся с этим сообщением об ошибке и хотел опубликовать разрешение в моем конкретном случае. Оказывается, моя проблема заключалась в том, что в одном из моих файлов css отсутствовала закрывающая скобка, и это заставляло файл не компилироваться. Это может быть труднее заметить, если у вас есть автоматизированный процесс, который устанавливает все (включая прекомпиляцию активов) для вашей производственной среды.

Ответ 10

После того, как все остальное не удалось...

Мое решение состояло в том, чтобы изменить файл макета с

= stylesheet_link_tag "reset-min", 'application'

к

= stylesheet_link_tag 'application'

И это сработало! (Вы можете поместить файл reset в манифест.)

Ответ 11

Еще один способ исправить это на Heroku: Убедитесь, что ваш Rakefile зафиксирован и нажат.

Ответ 12

На сервере heroku (файловая система только для чтения), Если вам нужна компиляция css (не рекомендуется, но вы можете это сделать), убедитесь, что вы выполнили настройки, как показано ниже -

# inside config/application.rb
config.assets.enabled = true
config.assets.prefix = Rails.root.join('tmp/assets').to_s

# If you are using sass then keep gem outside of asset group
 gem 'sass-rails',   '3.1.4'

# inside config/environments/production.rb
config.assets.compile = true

Ответ 13

если вы считаете, что следовали за всем хорошим, но все же несчастливым, просто убедитесь, что вы /capistrano запустили touch tmp/restart.txt или эквивалент в конце. Я был в неудачном списке, но теперь:)

Ответ 14

У вас, вероятно, есть syntax error в css, который вы используете.

Запустите эту команду

$ bundle exec rake assets:precompile RAILS_ENV=development --trace

Это даст исключение, зафиксировало это, и все закончится.

Спасибо