AJAX запрос администрирования веселья работает в разработке, 404s в производстве - PullRequest
0 голосов
/ 27 января 2012

Я строю сайт на Spree 0.70.3 и Rails 3.1.3. В разработке я просто использую порт 3000; в производстве у нас есть Passenger 3.0.9 и Nginx 1.0.8.

При связывании продукта с таксоном в Spree вы переходите на страницу с пустым списком таксонов. При вводе в поле поиска запускается запрос публикации AJAX, чтобы найти таксоны, соответствующие этой строке, и отобразить их в качестве потенциальных таксонов для продукта.

В разработке это работает нормально; Я вижу запросы, поступающие в журнал разработки, и на странице появляются таксоны. В производственной среде консоль Chrome показывает, что запрос AJAX получает ответ 404. Журналы Nginx просто записывают ответ 404; журналы Rails не показывают записи запроса. Я предполагаю, что Nginx видит, что запрос имеет расширение .js, и ищет файл, возможно, в каталоге public/, а не отправляет запрос в Rails.

Кто-нибудь сталкивался с этой проблемой со Spree / Nginx раньше? Как я могу заставить Nginx регистрировать больше данных о том, как он пытается разрешить запрос? Что-нибудь о конфигурации Nginx, которую я должен здесь проверить?

ETA: я ускорил ведение журнала Nginx, и он определенно выглядит так, как будто Nginx ищет файл .js как фактический файл, а не передает запрос Passenger и Rails. Это можно настроить?

2012/01/27 14:33:17 [error] 4430#0: *2 open() "/var/www/live/current/public/admin/products/<product_slug>/taxons/available.js" failed (2: No such file or directory), client: 64.134.40.51, server: <obfuscated>.com, request: "POST /admin/products/<product_slug>/taxons/available.js HTTP/1.1", host: "<obfuscated>", referrer: "https://<obfuscated>/admin/products/<product_slug>/taxons/selected"

1 Ответ

0 голосов
/ 27 января 2012

Решение оказывается Nginx / Passenger.Я нашел эту ветку списка рассылки , в которой указывалось, что любые блоки location в конфигурации Nginx нуждаются в своих собственных директивах passenger_enabled on;.Таким образом, этот блок

# "Far-future" expiration dates
location ~* \.(js|css|jpg|jpeg|gif)$ {
    if (-f $request_filename) {
        expires                        max;
        break;
    }
}

должен выглядеть следующим образом

# "Far-future" expiration dates
location ~* \.(js|css|jpg|jpeg|gif)$ {
    passenger_enabled on;
    if (-f $request_filename) {
        expires                        max;
        break;
    }
}

Это решило проблему.

...