Замените AppEngine Devserver на Spawning (BaseHTTPRequestHandler как WSGI)

StackOverflow https://stackoverflow.com/questions/1293249

  •  18-09-2019
  •  | 
  •  

Вопрос

Я хочу заменить сервер разработчика AppEngine на нерест.Spawning обрабатывает стандартные обработчики wsgi, как и appengine, поэтому запустить приложение на нем легко.

Но сервер разработчика учитывает ваш файл app.yaml, в котором есть перенаправление URL-адресов и т. д.Я просматривал код devserver, и получить BaseHTTPRequestHandler довольно легко:

from google.appengine.tools.dev_appserver import CreateRequestHandler
dev = CreateRequestHandler(os.path.dirname(__file__), '', require_indexes=False, static_caching=True)

Но BaseHTTPRequestHandler не является приложением WSGI, поэтому я предполагаю, что мне нужно что-то добавить, чтобы оно заработало.Есть какие-нибудь подсказки?

Это было полезно?

Решение

Я не думаю, что вы сможете так легко вытащить часть dev_appserver и использовать ее на собственном WSGI-сервере.dev_appserver творит много «магии», и на самом деле он не структурирован для того, чтобы его можно было извлечь и использовать в качестве оболочки WSGI на другом сервере (еще жаль).

Вы можете проверить TвистедАЭ, который работает над созданием альтернативной среды обслуживания;если вы действительно хотите использовать нерест, вы, вероятно, можете взять за основу работу TwistedAE.

Тем не менее, если вы хотите сделать это самостоятельно, есть несколько вариантов:

  1. Вы можете написать свою собственную оболочку для взаимодействия WSGI с классом, возвращаемым CreateRequestHandler.В этом случае вам необходимо реплицировать интерфейс в БазовыйHTTPсервер.BaseHTTPRequestHandler из Python SDK.Однако преобразование WSGI в него только для того, чтобы код dev_appserver мог преобразовать его обратно, кажется немного извращенным.
  2. Вы можете вырвать код из метода _HandleRequest DevAppServerRequestHandler, изменить его для работы с WSGI и создать на его основе приложение WSGI (вероятно, это лучший вариант, если вы хотите заняться своими руками).
  3. Вы можете начать с нуля, и я считаю, что именно такой подход использует TwistedAE.

Что бы вы ни делали, следует помнить одну вещь:App Engine явно ожидает однопоточную среду для своих приложений.Не используйте многопоточный подход, если вы хотите, чтобы приложения работали локально так же, как в рабочей среде или на сервере dev_appserver!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top