Загрузка из Blobstore перенаправляет в неправильный модуль
Эта проблема
При загрузке файла с помощью Go Blobstore API путь успеха перенаправляется в неправильный модуль appengine. Вот более наглядное описание проблемы:
- Пользователь попадает на страницу загрузки модуля A:
http://A.my-appengine-app.com/upload
- Браузер пользователя делает запрос в модуль для сеанса загрузки:
http://A.my-appengine-app.com/upload/session
- Модуль A определяет обработчик для
/upload/session
который запускает следующий код Go:url, err := blobstore.UploadURL(c, "/upload/success")
- Метод возвращает URL, похожий на:
http://A.my-appengine-app.com/_ah/upload/[some long hash]/
- Этот URL-адрес возвращается в браузер пользователя и вставляется в
action
из<form>
, - Пользователь отправляет несколько частей
POST
запрос к URL - Независимо от того, что обрабатывает URL (некоторый обработчик приложения не из пользовательского пространства), он пытается перенаправить обратно на
/upload/success
Здесь вещи становятся странными. В процессе разработки сервер перенаправляет на "/upload/success" в модуле A. В производственном процессе сервер перенаправляет на основной модуль, который мы можем назвать B на данный момент. Я могу сказать, что это происходит, потому что я получаю 404
в моей веб-консоли и журналы указывают, что запрос делается к модулю B. Я даже зашел так далеко, что явно передал имя хоста как часть пути успеха (шаг № 3), но безрезультатно.
Текущее решение (не идеально)
Кажется, у меня есть единственное решение - определить обработчик в модуле B для обработки запроса так, как это сделал бы модуль A. Поскольку архитектура goapp объединяет все модули вместе, это не худший компромисс в мире, но это семантически неверно, учитывая, что модули должны быть вертикально независимыми. Если у кого-то есть идеи, как обойти это, я был бы обязан. Сейчас я возьму вышеупомянутый подход.