Из-за обстоятельств, не зависящих от меня, моя производственная база находится в mysite.example.com/mysite
. Я почти уверен, что это распространенная проблема конфигурации Apache / Passenger, и мне не интересно, как ее исправить прямо сейчас, потому что сервер находится вне моего контроля. Достаточно сказать, что контроллер для «/» указывает там, и я не могу изменить это в ближайшее время.
Теперь, долгое время, это не было проблемой, потому что R(MyIndexController)
указывает на правильное место. Тем не менее, я обслуживаю CSS своего сайта с помощью вызова Rack::Static
, чтобы сделать $ SITE_ROOT / общедоступным. Это означает, что таблица стилей находится на mysite.example.com/mysite/css/style.css
. Вот в чем проблема: метод Camping URL()
при вызове в моем макете дает http://mysite.example.com
, а не http://mysite.example.com/mysite
. Поэтому я не могу указать, чтобы он указывал на подкаталог / css, потому что в середине не хватает «прыжка». Когда я запускаю rackup локально, все в порядке (потому что этот файл localhost:8080/css/style.css
), но на производственном сервере я не знаю, как это исправить.
Мой вопрос: есть ли другой метод (может быть, прямо из Rack?), Который я должен вместо этого вызывать? Я действительно хочу избежать жесткого кодирования и / или иметь возможность взломать, чтобы определить, работаю ли я локально (для отладки) или в производстве, для каждого рендеринга макета.
ETA: ОК, это становится незнакомым. Очевидно, что я абстрагировал некоторые из фактических деталей выше, часть которых, я думаю, я «перебрал». URL верхнего уровня на самом деле больше похож на /mysite/rest
(HTML-презентация нашего интерфейса RESTful для разработчиков), а не на /mysite/management
(учетные записи) или /mysite/ui
(пользовательский интерфейс JQuery'd / "nice") , Они настраиваются на нашем 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), чтобы найти этот ресурс .