2013-07-24 1 views
2

«Модули приложений» - это новая (и экспериментальная, и смущающая) функция в App Engine: https://developers.google.com/appengine/docs/python/modules. Разработчикам настоятельно рекомендуется преобразовать использование функции «backends» для использования этой новой функции.Запуск модулей модулей приложений в Google App Engine

Там, кажется, два способа запуска экземпляра модуля: отправить запрос HTTP к нему (то есть в http://modulename.appname.appspot.com для appname применения и modulename модуля), или для вызова google.appengine.api.modules.start_module().

Простой способ

Простой способ запуска экземпляра модуля, казалось бы создать запрос HTTP. Тем не менее, в моем случае это приводит только два результатов, ни один из которых является то, что я хочу:

  • Если я использую имя бэкэнда, который определяет мое приложение, т.е. http://backend.appname.appspot.com, запрос надлежащим образом направляется к backend и надлежащим образом лишены (поскольку доступ к бэкэнду по умолчанию определяется как закрытый).

  • Любое другое приводит к тому, что запрос направляется к единственному интерфейсу модуля по умолчанию, даже используя случайные строки символов в качестве имен модулей, например http://sdlsdjfsldfsdf.appname.appspot.com. Это даже справедливо для идентификаторов экземпляров, например, в случае http://99.sdlsdjfsldfsdf.appname.appspot.com и т. Д. И, конечно, (это проблема) для фактического имени моего модуля.

Запуск через API

В документации сказано, что вызов start_module() с именем модуля и версии должны вызывать указанную версию указанного модуля для запуска. Тем не менее, я получаю UnexpectedStateError всякий раз, когда я вызываю эту функцию с допустимыми аргументами.

несчастного положение дел

Потому что я не могу получить эту работу, мне интересно, если есть некоторая тонкость, что документация не может быть упомянута. Моя настройка довольно проста, поэтому мне интересно, является ли это распространенной проблемой, с которой кто-то нашел решение.

+0

Как я вижу модули, они не являются чем-то, что запускается. Вместо этого это способ разделить ваше приложение на разные логические единицы, например. веб-и api-часть вашего приложения. Таким образом, один из способов просмотра модулей - это несколько приложений в одном приложении, которые используют общие ресурсы, такие как хранилище данных и memcache. В [примере на Python] (https://github.com/GoogleCloudPlatform/appengine-modules-helloworld-python) нет упоминания о запуске модуля. У них просто разные URL-адреса. – dlebech

+0

Но в панели управления администратора вы можете просмотреть экземпляры, которые были запущены для вашего приложения, и каждый экземпляр связан с модулем и версией. (Фактически вы выбираете модуль и версию и можете просматривать все экземпляры, связанные с этой парой.) И когда вы просматриваете экземпляры, вы можете их закрыть ... так что они каким-то образом начали работать. – Jeremy

+1

Экземпляры автоматически запускаются при запросе вашего приложения. В случае модулей я предполагаю, что он работает одинаково: экземпляры для модуля автоматически запускаются, когда выполняется запрос для URL-адреса, обслуживаемого модулем. Конечно, вы можете установить некоторые незанятые экземпляры (в настройках приложения), и вы, вероятно, также можете запускать экземпляры по требованию (в определенной степени), но обычно это происходит автоматически и не является чем-то специфичным для модулей. Опять же, это основано на моем понимании, поэтому я могу ошибаться. – dlebech

ответ

3

Получается, что версии не могут быть числовыми. Эта проблема, похоже, происходила, потому что версия нашего модуля была «1», а не (например) «v1».

0

С модулями они немного изменили терминологию. То, что раньше было «backend», теперь является «базовым масштабированием» или «ручным масштабированием» экземпляров.

экземпляры «Автоматическое масштабирование» и «базовое масштабирование» запускаются при обработке запроса, в то время как экземпляры «ручного масштабирования» запускаются постоянно.

Как правило, для запуска экземпляра вы отправляете HTTP-запрос на URL вашего модуля.

start_module(), кажется, ограниченное использование для модулей с экземплярами «ручного масштабирования» или перезапуск модулей, которые были остановлены с помощью stop_module().

+1

Благодарим вас за ответ. На самом деле это тоже не работает в моем случае; Я отредактирую вопрос, чтобы уточнить. – Jeremy

0

Вы можете добавить:

login: admin 

Для обработчика для внутреннего интерфейса. Таким образом, пользователь-администратор может вызвать ваш сервер и запустить его для запуска.С помощью login: admin вы также можете запросить URLFetch-запросы, которые возникли в вашем приложении (т. Е. Из внешнего интерфейса), для запуска вашего бэкэнда.

+1

Модули, о которых идет речь, уже настроены на публичность, поэтому это предложение, к сожалению, не принесет никакой пользы в этом случае. – Jeremy