the rails present not images asset ruby-on-rails ruby-on-rails-3 asset-pipeline

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.