Aucun résultat ne correspond itinéraire [GET] / actifs
-
27-10-2019 - |
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
?
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>