Ninguna ruta coincide con [GET] / assets

Tengo una aplicación de Rails que estoy tratando de probar en el entorno de producción. corrí 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 Yo obtengo:

ActionController::RoutingError (No route matches [GET] "/assets/application-eff78fd67423795a7be3aa21512f0bd2.css"):

Este archivo existe aunque en /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css.

Cualquier idea de por qué estoy recibiendo esto RoutingError?

preguntado Oct 19 '11, 20:10

9 Respuestas

En el modo de producción, Rails no será responsable de servir activos estáticos. Por lo tanto, está recibiendo este error. Thin tampoco lo hará, ya que es solo un envoltorio alrededor de Rails.

Esto es controlado por 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 establecer ENV['RAILS_SERVE_STATIC_FILES'] a la verdad

Puedes configurar eso true o use un servidor real como Apache o Nginx que sirva los activos estáticos. Sospecho que Pow también puede hacerlo.


Si estás en Heroku, recomiendan el uso de la rails_12factor gem que habilita esta configuración de forma predeterminada. Coloque la gema en un production grupo en tu Gemfile, Así:

group :production do
  gem 'rails_12factor'
end

Respondido 11 Abr '17, 00:04

¿Alguien sabe si esta es una solución a dicho problema cuando se implementa en heroku? - kyle clegg

Respuesta clara, muchas gracias. Llegué a esta página cuando estaba probando el entorno de producción usando thin en mi máquina de desarrollo. Estaba compilando los activos pero application.css estaba vacío y el registro del servidor dio error del OP. - Veritas1

En Rails 4 será config.serve_static_files. config.serve_static_assets está en desuso y se eliminará en Rails 5. - sampi

Al implementar en una distribución RHEL, no toqué la configuración del entorno predeterminado, solo agregué la gema rails_12factor en Rails v4.2.4, ahora todo está bien. Muchas gracias - Onur Kucukkece

@Onur: Esto significa que su aplicación Rails servirá los activos, en lugar de su servidor web. No recomiendo esta configuración en absoluto porque puede hacer que su servidor Rails sea más lento. - ryan bigg

Agregando a lo que Ryan dijo anteriormente, la guía de canalización de activos de Rails describe cómo configurar Apache o nginx para servir los activos estáticos por usted.

http://guides.rubyonrails.org/asset_pipeline.html

Realmente debería configurar nginx o Apache para servir activos estáticos, ya que están mucho mejor optimizados para esta tarea que mongrel/thin/unicorn.

Respondido 24 Oct 11, 17:10

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 tampoco funcionó para mí. Sin embargo, el recurso fue útil. Así que tomé la configuración de Nginx desde allí y agregué el raíz directiva, 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;
   }

Reinicie nginx, y eso es todo.

Respondido 13 Feb 13, 13:02

En los carriles 5, el config.serve_static_files la opción ha cambiado, por lo que ahora necesita tener

config.public_file_server.enabled = true

para servir activos localmente.

Respondido el 26 de diciembre de 16 a las 22:12

De hecho, no necesitaba modificar ninguna configuración predeterminada. tu solo volver a compilar el archivo de activos de nuevo.

eliminar público/activos

1.rake activos:clobber RAILS_ENV=producción

compilación de activos

2.rake activos:precompilar RAILS_ENV=producción

3. reiniciar el servidor, por ejemplo (nginx)

Respondido el 20 de junio de 20 a las 10:06

@SteveO7, obviamente, los rieles usan la canalización de activos en el modo de desarrollo de forma predeterminada. - Albert Qing

Rails 4.2 agregó/cambió 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 forma predeterminada en "falso" y se producirá el RoutingError.

Esta es una solución fácil:

config.serve_static_files = true

Respondido el 25 de enero de 16 a las 18:01

Gracias, esta es la opción más simple. La configuración generalmente depende del entorno del servidor y es bueno hacerlo configurable con una variable env. - Akostadinov

prueba el siguiente código:

config / environment / production.rb

config.assets.compile = true

luego ejecute el comando:

RAILS_ENV=production rake assets:precompile

luego envíe todos los archivos de compilación y el archivo de manifiesto al servidor.

Respondido el 20 de junio de 20 a las 10:06

yo suelo Mina+puma+nginx para implementar mi aplicación Rails 5, obtuve

ActionController::RoutingError (No route matches [GET] "/assets/application-658cf2ab3ac93aa5cb41a762b52cf49d7184509c307922cd3fbb61b237a59c1a.css")

verifique 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, configurarlo correctamente

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.

Respondido el 13 de Septiembre de 17 a las 10:09

Si alguien llega aquí con el mismo error en el entorno de prueba que yo, esto es lo que me ayudó:

rails assets:clobber assets:precompile RAILS_ENV=test

entonces:

ps axu | grep your-username

para encontrar spring server proceso y su PID luego matarlo a través de:

kill <spring-server-PID>

Respondido 21 Feb 18, 16:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.