jQuery с Rails при развертывании в нескольких subURI - PullRequest
1 голос
/ 10 февраля 2010

Эй. Итак, у меня есть приложение Rails, которое развертывается на производственном компьютере и обслуживает его через Apache / Passenger для двух subURI.

/app
/app_2

оба вышеуказанных subURI работают с одной и той же кодовой базой. Это всего лишь две символические ссылки на общедоступный каталог, на которые оба указывают через Passenger:

RailsBaseURI "/app"
RailsBaseURI "/app_2"

Теперь, я большой поклонник jQuery. Так что я использую его с парой плагинов, один из которых - функция автозаполнения:

$("#municipality_name").autocomplete('autocomplete_municipality', {
    matchContains: true,
    scroll: false
}).result(function(event, data, formatted) {
    $.post('fill_state', {city: formatted}, null, 'script');
});

Проблема, с которой я сталкиваюсь, заключается в том, что когда он запускается в производство, URL, который вызывается, является

  http://www.app.com/autocomplete_municipality

вместо

http://www.app.com/app/autocomplete_municipality - или же - http://www.app.com/app_2/autocomplete_municipality

(я знаю, что там нет имени контроллера, у меня есть маршруты, чтобы дать мне эти пути.)

В любом случае, мой вопрос: как, черт возьми, я могу сказать jQuery, чтобы он не сдул путь subURI? config.action_controller.relative_url_root = "/signup_2" не представляется приемлемым вариантом, потому что у меня есть несколько subURI здесь. Я также не хочу менять путь в методе jQuery на autocomplete('app/autocomplete_municipality'..., так как я до сих пор не получаю доступ к своим двум subURI. Может быть, это единственный вариант.

Причина двух URI в основном для внутреннего тестирования -> переключение производства (поскольку мы открываем новый сайт сначала для компании, а затем для широкой публики), и мы хотели иметь возможность запускать все сразу из / app_2 (наш путь тестирования) в / app (открытый путь) без необходимости что-либо менять на стороне конфигурации.

Мысли

Ответы [ 2 ]

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

Или вы можете использовать именованный маршрут и помощник вида для определения URL в переменной JavaScript.

var autocomplete_path = <%= autocomplete_municipality_path %>;

Да, это ужасно.

(развертывание ваших тестовых и производственных приложений на отдельных доменах (или поддоменах) вместо отдельных каталогов устранит эти проблемы)

0 голосов
/ 10 февраля 2010

Вы можете проанализировать текущее местоположение и поместить его в путь автозаполнения.

var pathname = window.location.pathname;

Затем объедините первую часть пути (или как бы глубоко вам не нужно идти) с первым параметром автозаполнения.

(Лично, возможно, домен 3-го уровня для разделения приложений был бы чище, и весь ваш код маршрутизации оставался бы одинаковым для каждого домена.)

...