URL кемпинга () не дает мне "корень сайта", как ожидалось?
Из-за обстоятельств, не зависящих от меня, мой производственный лагерь появляется на mysite.example.com/mysite
, Я почти уверен, что это распространенная проблема конфигурации Apache / Passenger, и мне не интересно, как ее исправить прямо сейчас, потому что сервер находится вне моего контроля. Достаточно сказать, что контроллер для "/" точек там, и я не могу изменить это в ближайшее время.
В течение долгого времени это не было проблемой, потому что R(MyIndexController)
указывает на правильное место. Тем не менее, я обслуживаю CSS моего сайта, используя Rack::Static
вызов, чтобы сделать $SITE_ROOT/ общедоступным. Это означает, что таблица стилей находится на mysite.example.com/mysite/css/style.css
, Вот в чем проблема: кемпинг URL()
метод, когда вызывается в моем макете, дает http://mysite.example.com
не http://mysite.example.com/mysite
, Поэтому я не могу указать, чтобы он указывал на подкаталог /css, потому что в середине не хватает "прыжка". Когда я запускаю Rackup локально, все в порядке (потому что этот файл находится в localhost:8080/css/style.css
), но на рабочем сервере я не знаю, как это исправить.
Мой вопрос: есть ли другой метод (может быть, прямо из Rack?), Который я должен вместо этого вызывать? Я действительно хочу избежать жесткого кодирования и / или иметь взлом, чтобы определить, работаю ли я локально (для отладки) или в производстве, для каждого рендеринга макета.
ЭТА: ОК, это становится незнакомым. Очевидно, что я абстрагировался от некоторых фактических деталей выше, часть которых, я думаю, я "перебрал". URL верхнего уровня на самом деле больше похож на /mysite/rest
(HTML-презентация нашего интерфейса RESTful для разработчиков), в отличие от /mysite/management
(счета) или /mysite/ui
(JQuery'd / "хороший" интерфейс). Они установлены в нашем config.ru, через run Rack::URLMap.new(Hash['/rest' => RestModule, '/ui' => PrettyInterfaceModule, '/management' => UserManagerModule]
, так далее.
Таким образом, в ответ на комментарий ниже, R(Index) из представления в RestModule, фактически возвращает /mysite/rest/
, В качестве примера у меня есть "домашняя" ссылка в макете, которая выглядит a :href=>R(Index)
и генерирует код, который выглядит как <a href="/mysite/rest/">
, Сервер настроен на обслуживание файлов из./public непосредственно в "корне сайта", поэтому ./public/css/style.css
на самом деле появляется в http://mysite.example.com/mysite/css/style.css
, как отмечалось ранее. Это та ссылка, которую у меня возникают проблемы при автоматическом создании, и из-за Rack::URLMap я подумал, что мне, возможно, придется полагаться на собственный метод Rack (а не абстракцию Camping), чтобы найти этот ресурс.
2 ответа
Так что в этом случае URL()
на самом деле возвращается http://mysite.example.com/mysite/rest/
? Как насчет этого?
URL().merge('../css/style.css')
Это старый вопрос, поэтому я предполагаю, что вы уже нашли обходной путь, но новый пассажир + apache (или ngnix) ведет себя правильно для кемпинга, насколько я мог повторить. Ваше приложение будет находиться в корневом каталоге документов, и все включения в папке /public, поэтому /public/css, должны корректно маршрутизироваться независимо от того, используете ли вы подпапку /mysite или нет, так как пассажир не имеет значения (опять же) в том, что касается как я могу повторить. Поэтому это должно быть легко решено с пассажиром 3 + Apache или ngnix.