Маршрут для обслуживания статических ресурсов (например,.jpgs и т.д.)
Я проработал множество интересных проблем маршрутизации - превращение URL-адреса запроса в хэш и т.д., но просто из любопытства, есть способ сказать системе маршрутизации, что вы хотите что-либо, что попадает под определенный подпункт url, который должен быть подан буквально - без прохождения контроллера?
Например, если у меня есть /home/me/public _html/rails_proj/images/foo.jpg и.../rails_proj/images/other/bar.jpg, могу ли я вставить маршрут, который говорит "что-нибудь под изображениями" должен просто служить объектом типа mime по умолчанию? "
Может быть интересно.
Ответы
Ответ 1
Если вы поместите каталог "images" в "общедоступную" папку приложения Rails (например:/public/images/), у вас не должно быть проблем с типами MIME, если ваш веб-сервер не настроен неправильно.
В соответствии с вашими примерами вы хотите, чтобы dir изображений был в корне приложения. Я не думаю, что есть способ, которым Rails может сделать эти изображения видимыми, но если вы действительно хотели, чтобы вы могли использовать mod_rewrite, чтобы заставить его работать. Еще раз, веб-сервер должен убедиться, что изображения имеют правильный тип MIME.
Ответ 2
Вещи, которые подаются из общего каталога, не будут проходить через Rails - они будут обрабатываться только вашим сервером (возможно, apache). Единственная причина, по которой вам нужно будет обслуживать изображения через систему рельсов, - это то, что вам нужен какой-то контроль над тем, кто мог бы получить к ним доступ. Просто поставьте все остальное на всеобщее обозрение и получите доступ к але:
siteurl.whatever/изображения/*. JPG
Ответ 3
Обычно я использую nginx в качестве интерфейса и Apache/Passenger в качестве бэкэнд. Ngingx проксирует все запросы Rails для Apache, но обрабатывает все статическое содержимое. Ознакомьтесь с примерами английской nginx wiki. Вот небольшая выдержка для nginx config:
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 или любого другого статического контента.
Ответ 4
Я думаю, что самый простой способ решить эту проблему - просто использовать вспомогательный метод image_path, который предоставит вам путь к изображению, которое вы хотите отобразить в представлении.
Например, если вы хотите направить файл logo.png под /assets/images/logo.png, вы можете просто использовать image_path ('logo.png').
Ответ 5
Предостережение: если ваш URL-адрес запроса соответствует статическому ресурсу WEBrick, дворняжку или что-то еще, он с радостью будет ее обслуживать. Любой ценой, вы не хотите этого в производстве: если ваш трафик достаточно высок, ваше приложение будет поставлено на колени только потому, что его ублюдки будут заняты обслуживанием статического контента.
Поэтому убедитесь, что ваш веб-сервер настроен правильно для всех видов статического контента, как отмечали предыдущие комментаторы.