Brak dopasowania trasy [GET] / assets

Mam aplikację Rails, którą próbuję przetestować w środowisku produkcyjnym. Uruchomiłem RAILS_ENV=production rake assets:precompile, który wygenerował wszystkie moje aktywa w /public / assets. Problem polega na tym, że po uruchomieniu aplikacji w / RAILS_ENV=production rails s thin dostaję:

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

Ten plik istnieje jednak w /public/assets/application-eff78fd67423795a7be3aa21512f0bd2.css.

Jakieś pomysły, dlaczego dostaję to RoutingError?

Author: Kyle Decot, 2011-10-20

9 answers

W trybie produkcyjnym Rails nie ponosi odpowiedzialności za obsługę zasobów statycznych. Dlatego otrzymujesz ten błąd. Thin też tego nie zrobi, bo to tylko owijka wokół szyn.

Jest to kontrolowane przez to ustawienie w config/environments/production.rb w aplikacji:

config.serve_static_files = false

Lub w Rails 5:

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

Lub ustawić ENV['RAILS_SERVE_STATIC_FILES'] na true.

Możesz ustawić na to true lub użyć prawdziwego serwera, takiego jak Apache lub Nginx, który będzie obsługiwał zasoby statyczne. Podejrzewam, że Pow może też to.


Jeśli jesteś na Heroku, zalecają użycie klejnotu rails_12factor, który domyślnie włącza to ustawienie. Umieść klejnot w grupie production w swoim Gemfile, tak:

group :production do
  gem 'rails_12factor'
end
 210
Author: Ryan Bigg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-10 23:35:14

Dodając do tego, co Ryan powiedział powyżej, Przewodnik rails asset pipeline opisuje, jak skonfigurować Apache lub nginx, aby obsługiwały zasoby statyczne dla Ciebie.

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

Naprawdę powinieneś skonfigurować Nginx lub Apache do obsługi zasobów statycznych, ponieważ są one znacznie lepiej zoptymalizowane do tego zadania niż mongrel/thin/unicorn.

 12
Author: bratsche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-24 16:22:18

Rozwiązałem ten sam problem. W moim przypadku odpowiedź Ryana nie była pomocna. Bratsche wskazał na prowadnice szynowe, niestety to też nie zadziałało. Jednak zasób był pomocny. Dlatego wziąłem stamtąd konfigurację Nginx i dodałem dyrektywę root , wskazując na katalog publiczny. Bez tego to nie działa.

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

     add_header ETag "";
     break;
   }
Uruchom ponownie nginx i to wszystko.
 6
Author: valk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-13 13:04:36

Rzeczywiście nie trzeba było modyfikować żadnych domyślnych configs. Ty po prostu przekompiluj ponownie plik zasobów.

Usuń publiczne / aktywa

1.Rake assets:clobber RAILS_ENV=production

Assets compile

2.Rake assets:precompile RAILS_ENV=production

3.restart serwera, np(nginx)

 3
Author: Albert.Qing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-24 13:19:42

Rails 4.2 dodał / zmienił tę linię w Twoim config / environments / staging.rb i produkcja.pliki rb:

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

Jeśli RAILS_SERVE_STATIC_FILES nie jest ustawiona, a Ty jesteś aktywami usług z twojego serwera Rails( jak w Unicorn), to domyślnie będzie to "false" i pojawi się RoutingError.

To jest proste rozwiązanie:

config.serve_static_files = true
 2
Author: Martin Sommer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-25 18:52:06

W rails 5 opcja config.serve_static_files została zmieniona, więc teraz musisz mieć

config.public_file_server.enabled = true

Do obsługi lokalnie aktywów.

 2
Author: Obromios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-26 22:50:14

Spróbuj poniżej kodu:

Config / environments / production.rb

config.assets.compile = true

Następnie uruchom polecenie:

RAILS_ENV=production rake assets:precompile

Następnie wypchnij wszystkie pliki kompilacji i plik manifestu na serwer.

 2
Author: puneet18,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 15:25:00

Używam mina+puma+nginx aby wdrożyć moją aplikację Rails 5, Mam

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

Sprawdź 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 już obsługuje to, config it corretcly

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;
}
Wszystko będzie dobrze.
 0
Author: Feuda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 09:47:46

Jeśli ktoś tu trafi z tym samym błędem w środowisku testowym, co ja, oto co mi pomogło:

rails assets:clobber assets:precompile RAILS_ENV=test

Wtedy:

ps axu | grep your-username

Aby znaleźć spring server proces i jego PID, zabij go przez:

kill <spring-server-PID>
 0
Author: ToTenMilan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 16:56:11