Подтвердить что ты не робот

Rails, favicon.ico не найден

Это странно, я получаю:

ActionController::RoutingError (No route matches "/favicon.ico")

но у меня есть favicon.ico в моем общедоступном каталоге... любые идеи, как это решить? Nginx вообще не выдает ошибку.

4b9b3361

Ответ 1

Кажется, что nginx не обрабатывает ваши статические активы (так как этот запрос для статического файла переходит в ActionController). Проверьте открытый корень в файле конфигурации nginx nginx.conf. Вот пример развертывания Capistrano:

server {
  listen       80;
  root /var/www/my_project/current/public;
}

И вы используете помощника favicon_link_tag в своей голове:)?

Ответ 2

Run

rake assets:precompile

тогда установите

config.serve_static_assets = true

в config\environments\production.rb файле. Затем перезагрузите сервер. Но я думаю, что rake assets:precompile не требуется.

Ответ 3

Если вы хотите сохранить 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;
      }
}

Ответ 4

Убедитесь, что файл favicon.ico не пуст (размер байтa > 0). По какой-то причине у меня был пустой файл favicon.ico, который вызывал ту же ошибку, хотя файл действительно существовал.

Ответ 5

удалите знак косой черты перед favicon.ico и попробуйте использовать что-то вроде:

<link rel="shortcut icon" type="image/png" href="favicon.ico" />

Ответ 6

У меня возникла такая же проблема, когда я сначала клонировал код из репозитория git и работал с RAILS_ENV=production. Поскольку в моем репозитории git не было никаких ресурсов, мне нужно было запустить rake assets:precompile.

Также я работал с рельсами s, поэтому config.serve_static_assets = true работал. Спасибо @Jiemurat