Неожиданное поведение mod_wsgi при отправке букмарклета или связанных действиях с базой данных - PullRequest
1 голос
/ 30 июня 2010

[обновлено ниже]

У меня возникла небольшая проблема при развертывании сайта на Apache с mod_wsgi с некоторыми функциональными возможностями javascript bookmarklet;Альфа-сайт доступен и используется здесь: stemhub.org .Проблема в том, что букмарклет (который представляет собой кнопку меню браузера) отправляет на страницу типа

http://stemhub.org/submit/http://the-users-link.com/here

, которая затем возвращает форму для сохранения метаданных о ссылке.Функция просмотра (приложение flask / werkzeug) проверяет базу данных, чтобы увидеть, была ли ссылка уже добавлена, а затем возвращает форму с уже существующим или вновь назначенным идентификатором ссылки, что, как я полагаю, может вызвать проблемы с синхронизацией.Очень странно, когда я впервые отправляю ссылку, я получаю страницу http://stemhub.org/submit/http://the-users-link.com/here с ошибкой «not found» apache, но если я потом перезагружаю страницу, я получаю форму, как задумано.Журналы ошибок содержат сообщения об исключениях из потоков, но они также появляются, когда сайт работает должным образом.

Параллельно развертывается приложение на другом порту - stemhub.org: 5000 - он работает на Tornado и отлично работает, как и версия для локальной разработки.

Вот букмарклеты, на случай, если они являются проблемой:

рабочая версия порта 5000: javascript:(function(){window.open('http://stemhub.org:5000/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())

версия проблемного порта 80: javascript:(function(){window.open('http://stemhub.org/submit/'+encodeURIComponent(window.location.href),'height=200,width=150')}())

ОБНОВЛЕНИЕ: По какой-то причине это относится к другому тегу, меняющему метод javascript encodeURIComponent на encodeURIвсе работает, как задумано, по крайней мере, в FF и Chrome.Однако в будущем приму совет Грэма Дамплтона о чем-то более разумном для этого.

1 Ответ

2 голосов
/ 30 июня 2010

Какова бы ни была ваша проблема, способ размещения второго URL-адреса внутри URL-адреса не будет работать с Apache.Это связано с тем, что Apache будет сворачивать повторяющиеся косые черты в одну косую черту, и эта единственная косая черта - это все, что приложение, размещенное на Apache, увидит в PATH_INFO.

Другими словами, это не проблема mod_wsgi и может возникнуть при использовании другихмеханизмы динамического размещения веб-приложений в сочетании с Apache, даже не Python.

Кстати, некоторые могут указать, что неизмененный URL-адрес находится в REQUEST_URI, но полагаться на это не обязательно хорошая идея, так какразделить это и сопоставить его с SCRIPT_NAME и PATH_INFO не всегда может быть прямым, в зависимости от того, используются ли правила переписывания в Apache.

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

...