Question

J'ai une application Rails que je suis en train de tester dans l'environnement de production. Je courus RAILS_ENV=production rake assets:precompile qui a généré tous mes actifs / actifs publics /. Le problème est que quand je commence mon application w / RAILS_ENV=production rails s thin je reçois:

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

Ce fichier existe bien à /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css.

Toutes les pensées pour expliquer pourquoi je reçois ce RoutingError?

Était-ce utile?

La solution

En mode production, Rails ne sera pas responsable de service actifs statiques. Par conséquent, vous obtenez cette erreur. Mince ne le fera pas non plus, car il est juste un emballage autour de Rails.

Ceci est contrôlé par ce paramètre dans config/environments/production.rb dans votre application:

config.serve_static_files = false

Ou dans Rails 5:

# config/environments/production.rb
config.public_file_server.enabled = true

ou un ensemble ENV['RAILS_SERVE_STATIC_FILES'] à true.

Vous pouvez soit définir à cette true ou utiliser un vrai serveur comme Apache ou Nginx qui desservira les actifs statiques. Je soupçonne Pow peut aussi le faire.


Si vous êtes sur Heroku, ils recommandent l'utilisation de la pierre précieuse de rails_12factor qui permet ce réglage par défaut. Placez la pierre précieuse dans un groupe production dans votre Gemfile, comme ceci:

group :production do
  gem 'rails_12factor'
end

Autres conseils

Ajoutant à ce que Ryan a dit plus haut, le guide de pipeline d'actifs Rails décrit comment configurer Apache ou nginx pour servir les actifs statiques pour vous.

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

Vous devriez vraiment nginx d'installation ou Apache pour servir les actifs statiques, car ils sont beaucoup mieux optimisés pour cette tâche que bâtarde / mince licorne /.

Il suffit de résoudre le même problème. Dans mon cas, la réponse de Ryan n'a pas été utile. Bratsche a souligné les guides Rails, malheureusement cela ne fonctionne pas pour moi aussi. Cependant la ressource a été utile. J'ai donc pris configuration Nginx à partir de là et a ajouté le root directive, pointant vers le répertoire public. Sans cela, il ne fonctionne pas.

   # serve static assets
   location ~ ^/assets/ {
     expires 1y;
     root  /path/to/my/cool_project/public;
     add_header Cache-Control public;

     add_header ETag "";
     break;
   }

Redémarrer nginx, et voilà.

En effet, vous ne l'avez pas besoin de modifier les configs par défaut. Vous venez de actifs recompilation fichier à nouveau .

supprimer publics / actifs

1.rake actifs: clobber RAILS_ENV = production

actifs compilation

2.rake actifs: precompile RAILS_ENV = production

serveur 3.Redémarrez, par exemple (nginx)

Rails 4.2 a ajouté / modifié cette ligne dans votre config / environnements / staging.rb et fichiers production.rb:

config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

Si RAILS_SERVE_STATIC_FILES n'est pas définie, et que vous êtes actifs de service de votre serveur Rails (comme avec Unicorn), il sera par défaut « false », et la RoutingError se produira.

Ceci est une solution facile:

config.serve_static_files = true

Dans les rails 5, l'option config.serve_static_files a changé, maintenant vous devez avoir

config.public_file_server.enabled = true

pour servir les actifs localement.

essayer ci-dessous le code:

config / environnements / production.rb

config.assets.compile = true

commande puis exécutez:

RAILS_ENV=production rake assets:precompile

puis poussez tous les fichiers et Compile fichier manifest au serveur.

J'utilise mina + pumas + nginx pour déployer mon Rails 5 application, je suis

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

config check / environnement / 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 gère déjà cette , il corretcly config

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;
}

les choses vont bien.

Si quelqu'un se ici avec la même erreur dans l'environnement de test comme je le fais, voici ce qui m'a aidé:

rails assets:clobber assets:precompile RAILS_ENV=test

alors:

ps axu | grep your-username

pour trouver processus spring server et son PID tuer alors via:

kill <spring-server-PID>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top