Это странно, я получаю:
ActionController::RoutingError (No route matches "/favicon.ico")
но у меня есть favicon.ico
в моем общедоступном каталоге... любые идеи, как это решить? Nginx вообще не выдает ошибку.
Это странно, я получаю:
ActionController::RoutingError (No route matches "/favicon.ico")
но у меня есть favicon.ico
в моем общедоступном каталоге... любые идеи, как это решить? Nginx вообще не выдает ошибку.
Кажется, что nginx не обрабатывает ваши статические активы (так как этот запрос для статического файла переходит в ActionController). Проверьте открытый корень в файле конфигурации nginx nginx.conf
.
Вот пример развертывания Capistrano:
server {
listen 80;
root /var/www/my_project/current/public;
}
И вы используете помощника favicon_link_tag
в своей голове:)?
Run
rake assets:precompile
тогда установите
config.serve_static_assets = true
в config\environments\production.rb
файле.
Затем перезагрузите сервер.
Но я думаю, что rake assets:precompile
не требуется.
Если вы хотите сохранить config.serve_static_assets = false, рекомендуется, если у вас есть nginx или apache, вы можете сообщить nginx, чтобы статически передавать файлы напрямую. Это особенно важно по соображениям производительности, поскольку вы не хотите, чтобы рельсы обслуживали эти активы.
Ниже приведен образец, который также правильно имеет nginx, статически обслуживающий каталог ресурсов:
server {
listen 80;
root /var/www/my_project/current/public;
location / {
proxy_pass http://mysite;
proxy_redirect off;
proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
# static resource routing - both assets folder and favicon.ico
location ~* ^/assets/|favicon.ico {
# Per RFC2616 - 1 year maximum expiry
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
expires 1y;
add_header Cache-Control public;
# Some browsers still send conditional-GET requests if there a
# Last-Modified header or an ETag header even if they haven't
# reached the expiry date sent in the Expires header.
add_header Last-Modified "";
add_header ETag "";
break;
}
}
Убедитесь, что файл favicon.ico
не пуст (размер байтa > 0). По какой-то причине у меня был пустой файл favicon.ico, который вызывал ту же ошибку, хотя файл действительно существовал.
удалите знак косой черты перед favicon.ico и попробуйте использовать что-то вроде:
<link rel="shortcut icon" type="image/png" href="favicon.ico" />
У меня возникла такая же проблема, когда я сначала клонировал код из репозитория git и работал с RAILS_ENV=production
. Поскольку в моем репозитории git не было никаких ресурсов, мне нужно было запустить rake assets:precompile
.
Также я работал с рельсами s, поэтому config.serve_static_assets = true
работал. Спасибо @Jiemurat