Я сделал базовое приложение 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
Это даст исключение, зафиксировало это, и все закончится.
Спасибо