@ "200" является объектной записью для объекта NSString. У него будет собственное пространство памяти, и johnsmoney укажет на него. Итак, marysmoney никогда не указывает на johnsmoney.
Что на самом деле происходит, это ...
Johns Money 200 // pointer 1
Marys Money 200 // pointer 1
Johns Money 100 // pointer 2
Marys Money 200 // pointer 1
johnsmoney указывает на @ "200". marysmoney также указывает на «200». Когда johnsmoney назначается @ «100», johnsmoney указывает на «100». Пока marysmoney все еще указывает на @ "200".
В App Engine Standard при использовании среды выполнения Python3.7 тег script
под обработчиками должен быть установлен на auto
. Вы можете проверить документацию по этому здесь о том, как должен быть сконфигурирован app.yaml
, обратите внимание, что он отличается от среды выполнения Python2.7, где вам нужно было указать script
для запуска. [1116 ]
Вы можете решить эту проблему, изменив файл app.yaml
, например, так:
runtime: python37
entrypoint: gunicorn -b :$PORT handle_incoming_email.app
env_variables:
...
inbound_services:
- mail
- mail_bounce
handlers:
- url: /static
static_dir: static
- url: /_ah/mail/
script: auto
login: admin
Обратите внимание, как требуется изменить script
в /_ah/mail/
на auto
вместо указав путь к скрипту для запуска. Затем обработчик должен автоматически найти сценарий для выполнения из файлов, развернутых в App Engine.
Далее, в своем файле handle_incoming_email.py
вы не определяете какую-либо точку входа для обработки вашего URL /_ah/mail
, вы можете решить эту проблему, добавив следующее, например:
import webapp2
app = webapp2.WSGIApplication([
('/_ah/mail/', IncomingMailHandler),
], debug=True)
Уведомление Теперь, как я изменил entrypoint
в вашем файле app.yaml
, чтобы он соответствовал вновь созданной точке входа WSGI в вашем файле handle_incoming_email.py
.
Также я не уверен насчет регулярного выражения '/.+' для обработчика, вы должны оставить его в '/.*' .
Параметр handler используется для маршрутизации запросов к статическим файлам, затем все остальные маршруты направляются в ваше основное приложение (значение auto является единственной опцией для элемента script, как упомянуто в документе , . ) в вашей точке входа. Это приложение должно обрабатывать запросы маршрутизации. Вы не можете определить другое приложение в том же сервисе.
Я бы предложил развернуть ваше почтовое приложение как отдельную службу в вашем приложении App Engine. Это позволит вам указать конкретные ресурсы или масштабирование для каждого из них. Это будет следовать принципам архитектуры микросервисов, реализованным в App Engine.