Маршрут для обслуживания статических ресурсов (например, .jpgs и т. Д.) - PullRequest
14 голосов
/ 10 февраля 2009

Я преодолел ряд интересных проблем с маршрутизацией - превращение URL-адреса запроса в хеш и т. Д., Но просто из любопытства, есть ли способ сообщить системе маршрутизации, что вам нужно все, что попадает под определенный подпуть URL, который будет обслуживаться буквально - без прохождения через контроллер?

Например, если у меня есть /home/me/public_html/rails_proj/images/foo.jpg и ... / rails_proj / images / other / bar.jpg, могу ли я вставить маршрут с надписью «что-нибудь» под изображениями должен просто служить объектом типа mime по умолчанию? "

Может быть интересно.

Ответы [ 5 ]

16 голосов
/ 10 февраля 2009

Если вы поместите каталог «images» в папку «public» приложения Rails (например: / public / images /), у вас не должно возникнуть проблем с типами MIME, если ваш веб-сервер не настроен неправильно.

Согласно вашим примерам, вы хотите, чтобы каталог изображений находился в корне приложения. Я не думаю, что есть хотя бы Rails способ сделать эти изображения видимыми, но если вы действительно этого хотите, вы можете использовать mod_rewrite, чтобы он работал. Еще раз, веб-сервер должен убедиться, что изображения имеют правильный тип MIME.

6 голосов
/ 10 февраля 2009

Вещи, которые доставляются из общедоступного каталога, не будут проходить через Rails - они будут обрабатываться только вашим сервером (возможно, apache). Единственная причина, по которой вам нужно будет передавать изображения через систему рельсов, заключается в том, что вам нужен какой-то контроль над тем, кто может получить к ним доступ. Просто оставьте все остальное в открытом доступе и получите доступ к аля: siteurl.whatever / изображения / *. JPG

5 голосов
/ 11 февраля 2009

Обычно я использую nginx в качестве внешнего интерфейса, а Apache / Passenger - в качестве внутреннего. Ngingx передает все запросы Rails к Apache, но обрабатывает весь статический контент. Посмотрите примеры на англоязычном nginx wiki . Вот небольшая выдержка для конфигурации nginx:

server {
    listen 80;
    server_name www.domain.com;
    location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|js)$ {
        root   /path/to/static/assets/dir;
    }
    location / {
        proxy_pass http://127.0.0.1:81;
    }
}

Поэтому Apache прослушивает порт 81 для обработки запросов Rails, передаваемых через nginx, и позволяет nginx доставлять статический контент. Предполагается, что nginx не только быстрее, чем Apache, доставляет статический контент, но также разгружает ваше Rails-приложение для каждого изображения, таблицы стилей, JavaScript или любого другого статического контента.

2 голосов
/ 17 июля 2012

Я думаю, что самый простой способ решить эту проблему - это использовать вспомогательный метод image_path, который предоставит вам путь к изображению, которое вы хотите отобразить в представлении. Например, если вы хотите сослаться на logo.png в /assets/images/logo.png, вы можете просто использовать image_path ('logo.png').

1 голос
/ 10 февраля 2009

Предостережение: если ваш URL-адрес запроса соответствует статическому ресурсу WEBrick, mongrel или чему-либо другому, он с радостью его обслужит. Во что бы то ни стало, вы не хотите, чтобы это производилось: если ваш трафик достаточно высок, ваше приложение будет поставлено на колени только потому, что его шавки будут заняты обслуживанием статического контента.

Поэтому убедитесь, что ваш веб-сервер правильно настроен для всех видов статического контента, как указывали предыдущие комментаторы.

...