Вопрос

Несмотря на /public каталог, если я посещаю http://site.example.com/favicon.ico Я получаю страницу 404. Интересно, если я попытаюсь посетить http://site.example.com/500.html Я также получаю 404 страницу, которая заставляет меня поверить, что /public Файлы вообще не обслуживаются. Я использую Nginx с единорогом. Есть ли настройки в рельсах, которые отключили бы порцию /public ресурсы?

РедактироватьМой конфигурация nginx:

server {
  listen 80;
  client_max_body_size 4G;
  server_name _;

  keepalive_timeout 5;

  # Location of our static files
  location ~ ^/(assets)/  {
    root /srv/ctr/current/public;
    gzip_static on; # to serve pre-gzipped version
    expires max;
    add_header  Cache-Control public;
  }

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    # If you don't find the filename in the static files
    # Then request it from the unicorn server
    if (!-f $request_filename) {
      proxy_pass http://app_server;
      break;
    }
  }

  # error_page 500 502 503 504 /500.html;
  # location = /500.html {
  #   root /var/rails/testapp/public;
  # }
}

я должен root :to => 'reports#index' На моих маршрутах, но я не понимаю, как это может изменить ситуацию.

РешениеЯ переместил линию root /srv/ctr/current/public; к выше keepalive_timeout 5;

Это было полезно?

Решение

Проверьте свой routes.rb, чтобы убедиться, что у вас нет линии, такой как

root :to => "home#index"

Также проверьте nginx.conf, чтобы убедиться, что у вас есть

root /path/to/app/public;

Для вашего сервера / vhost.

Дэйв

Другие советы

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

Настройте свой nginx .conf

vim /etc/nginx/conf.d/your_project.conf

server {
    ......

    # 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's 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;
      }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top