ruby-on-rails - rails - the asset is not present in the asset pipeline
rieles 3.1.0 ActionView:: Template:: Error(application.css no está precompilado) (14)
Aquí está la solución rápida:
Si está usando capistrano, agregue esto a su deploy.rb:
after ''deploy:update_code'' do
run "cd #{release_path}; RAILS_ENV=production rake assets:precompile"
end
despliegue de la tapa
Hice una aplicación básica de rieles con un controlador de páginas simples con una función de índice y cuando cargo la página me sale
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
De forma predeterminada, Rails asume que usted tiene sus archivos precompilados en el entorno de producción, si desea usar la compilación en vivo (compilar sus activos durante el tiempo de ejecución) en producción, debe configurar el archivo config.assets.com en verdadero .
# config/environments/production.rb
...
config.assets.compile = true
...
Puede usar esta opción para retroceder a Sprockets cuando esté usando activos precompilados, pero faltan archivos precompilados.
Si config.assets.compile
opción falsa y faltan archivos precompilados, obtendrá un "AssetNoPrecompiledError" que indica el nombre del archivo faltante.
Después de todo lo demás falló ...
Mi solución fue cambiar el archivo de diseño de
= stylesheet_link_tag "reset-min", ''application''
a
= stylesheet_link_tag ''application''
¡Y funcionó! (Puedes poner el archivo de reinicio dentro del manifiesto.)
En el servidor heroku (sistema de archivos de solo lectura), si desea la compilación en tiempo de ejecución de css (no se recomienda, pero puede hacerlo), asegúrese de haber realizado los ajustes como se muestra a continuación:
# 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
Estaba teniendo exactamente el mismo error en mi entorno de desarrollo. Al final, todo lo que tenía que hacer para solucionarlo era agregar:
config.assets.manifest = Rails.root.join("public/assets")
a mi archivo config / environment / development.rb y lo arregló. Mi configuración final en el desarrollo relacionado con los activos se ve así:
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
Me encontré con este mensaje de error hoy y quería publicar la resolución de mi caso particular. Resulta que mi problema era que a uno de mis archivos css le faltaba una llave de cierre y esto hacía que el archivo no se compilara. Puede ser más difícil notar esto si tiene un proceso automatizado que configura todo (incluyendo la precompilación de activos) para su entorno de producción.
OK - Tuve el mismo problema No quería usar "config.assets.compile = true": tuve que agregar todos mis archivos .css a la lista en config / environment / production.rb:
config.assets.precompile += %w( carts.css )
Luego tuve que crear (y luego borrar) tmp / restart.txt
Usé constantemente el helper stylesheet_link_tag, así que encontré todos los archivos css adicionales que necesitaba agregar con:
find . /( -type f -o -type l /) -exec grep stylesheet_link_tag {} /dev/null /;
Obtendrá un mejor rendimiento en la producción si configura config.assets.compile en false en production.rb y precompila sus activos. Puedes precompilar con esta tarea de rake:
bundle exec rake assets:precompile
Si está utilizando Capistrano, la versión 2.8.0 tiene una receta para manejar esto en el momento del despliegue. Para obtener más información, consulte la sección "En producción" de la Guía de canalización de activos: http://guides.rubyonrails.org/asset_pipeline.html
Para todos aquellos que están leyendo esto pero no tienen problemas con application.css
y en su lugar con sus clases CSS personalizadas, por ejemplo, base.css
, base.css
, etc.
La solución es usar como se mencionó.
bundle exec rake assets:precompile
Y en las referencias de hojas de estilo solo referencia application.css
<%= stylesheet_link_tag "application", :media => "all" %>
Debido a que la cartera de activos precompilará todas sus hojas de estilo en application.css. Esto también sucede en el desarrollo, por lo que usar cualquier otra referencia es incorrecto cuando se usa la canalización de activos.
Probablemente tenga un syntax error
en el css que está usando.
Ejecuta este comando
$ bundle exec rake assets:precompile RAILS_ENV=development --trace
Se dará la excepción, arreglado eso y ya está todo hecho.
Gracias
Si crees que has seguido todo bien pero que aún tienes mala suerte, solo asegúrate de que / Capistrano ejecute el touch tmp / restart.txt o su equivalente al final. Estaba en la lista desafortunada pero ahora :)
Solo otra forma de solucionar esto en Heroku: asegúrate de que tu Rakefile esté comprometido y presionado.
También tuve este problema, donde intentar ejecutarlo en producción sin precompilarlo aún generaría errores no precompilados. Tuve que cambiar la línea en la que se comentó 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)
Una solución rápida para el usuario de Capistrano es poner esta línea en Capfile.
# Uncomment if you are using Rails'' asset pipeline
load ''deploy/assets''