ruby-on-rails - rails - the asset is not present in the asset pipeline
Ninguna ruta coincide con[GET]/assets (9)
Tengo una aplicación de Rails que estoy intentando probar en el entorno de producción. RAILS_ENV=production rake assets:precompile
que generó todos mis activos en / public / assets. El problema es que cuando inicio mi aplicación con RAILS_ENV=production rails s thin
obtengo:
ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):
Este archivo existe aunque en /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css
.
¿Alguna idea de por qué estoy obteniendo este RoutingError
?
Acabo de resolver el mismo problema. En mi caso, la respuesta de Ryan no fue útil. Bratsche señaló las Guías Rails, desafortunadamente esto no funcionó para mí también. Sin embargo, el recurso fue útil. Así que tomé la configuración de Nginx desde allí y agregué la directiva raíz , apuntando al directorio público. Sin esto, no funciona.
# serve static assets
location ~ ^/assets/ {
expires 1y;
root /path/to/my/cool_project/public;
add_header Cache-Control public;
add_header ETag "";
break;
}
Reinicia nginx, y eso es todo.
Agregando a lo que dijo Ryan anteriormente, la guía de la tubería de activos de Rails describe cómo configurar Apache o nginx para que le sirvan los activos estáticos.
http://guides.rubyonrails.org/asset_pipeline.html
Deberías configurar nginx o Apache para que sirvan recursos estáticos, ya que están mucho mejor optimizados para esta tarea que mongrel / thin / unicorn.
De hecho, no necesitó modificar ninguna configuración predeterminada. Usted simplemente vuelve a compilar el archivo de activos .
eliminar público / activos
Activos 1.rake: clobber RAILS_ENV = producción
compilación de activos
Activos 2.rake: precompilación RAILS_ENV = producción
3. Reiniciar el servidor, p. Ej. (Nginx)
En el modo de producción, Rails no será responsable de servir los activos estáticos. Por lo tanto, está obteniendo este error. Thin tampoco lo hará, ya que es solo una envoltura alrededor de Rails.
Esto se controla mediante esta configuración en config/environments/production.rb
en su aplicación:
config.serve_static_files = false
O en Rails 5:
# config/environments/production.rb
config.public_file_server.enabled = true
O configure ENV[''RAILS_SERVE_STATIC_FILES'']
como verdadero.
Puede establecer esa true
o utilizar un servidor real como Apache o Nginx que servirá los activos estáticos. Sospecho que Pow también puede hacerlo.
Si estás en Heroku, recomiendan el uso de la gema rails_12factor
que habilita esta configuración de forma predeterminada. Coloque la gema en un grupo de production
en su Gemfile
, así:
group :production do
gem ''rails_12factor''
end
En los rieles 5, la opción config.serve_static_files
ha cambiado, por lo que ahora debe tener
config.public_file_server.enabled = true
para servir activos localmente
Rails 4.2 ha agregado / cambiado esta línea en sus archivos config / environments / staging.rb y production.rb:
config.serve_static_files = ENV[''RAILS_SERVE_STATIC_FILES''].present?
Si RAILS_SERVE_STATIC_FILES no está configurado, y usted es un activo de servicio de su servidor Rails (como con Unicorn), entonces se establecerá de manera predeterminada en "false" y se producirá RoutingError.
Esta es una solución fácil:
config.serve_static_files = true
Si alguien llega aquí con el mismo error en el entorno de prueba que yo, aquí está lo que me ayudó:
rails assets:clobber assets:precompile RAILS_ENV=test
entonces:
ps axu | grep your-username
para encontrar el proceso del spring server
y su PID y luego matarlo a través de:
kill <spring-server-PID>
Uso mina + puma + nginx para implementar mi aplicación Rails 5, obtuve
ActionController::RoutingError (No route matches [GET] "/assets/application-658cf2ab3ac93aa5cb41a762b52cf49d7184509c307922cd3fbb61b237a59c1a.css")
compruebe config / environments / production.rb
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV[''RAILS_SERVE_STATIC_FILES''].present?
NGINX ya maneja esto , configúralo correccly
upstream puma {
server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock;
}
server {
listen 80 default_server deferred;
# server_name example.com;
root /home/deploy/apps/appname/current/public;
access_log /home/deploy/apps/appname/current/log/nginx.access.log;
error_log /home/deploy/apps/appname/current/log/nginx.error.log info;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
try_files $uri/index.html $uri @puma;
location @puma {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 10M;
keepalive_timeout 10;
}
las cosas funcionarán bien
prueba el siguiente código:
config / environments / production.rb
config.assets.compile = true
luego ejecuta el comando:
RAILS_ENV=production rake assets:precompile
luego, inserte todos los archivos de compilación y el archivo de manifiesto en el servidor.