У меня работает служба GAE по умолчанию, хотя я хочу реализовать микросервис. Версия по умолчанию имеет две версии, и я реализую микросервис только в одном из них, потому что мне нужно протестировать его прежде, чем поместить его в основную версию. Для этого нового микросервиса я создал файлы my_module.py и my_module.yaml. Когда я запускаю код «appcfg.py обновление my_module.py» загрузка/обновление работает отлично, как бревенчатые сильфонным показывает:GAE Python Microservice не работает
10:28 AM Host: appengine.google.com
10:28 AM Application: application_name; module: my_module; version: one
10:28 AM Starting update of app: application_name, module: my_module, version: one
10:28 AM Getting current resource limits.
10:28 AM Scanning files on local disk.
10:28 AM Cloning 2 application files.
10:28 AM Compilation starting.
10:28 AM Compilation completed.
10:28 AM Starting deployment.
10:28 AM Checking if deployment succeeded.
10:28 AM Deployment successful.
10:28 AM Checking if updated app version is serving.
10:28 AM Completed update of app: application_name, module: my_module, version: one
Однако, когда я иду в console.cloud.google.com проверить в журнале я постоянно вижу ошибку:
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
ImportError: No module named my_module
Пожалуйста, кто-нибудь знает, почему это происходит?
UPDATE: Я помещаю свой код нового microservice.
my_module.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import webapp2
class MainHandler(webapp2.RedirectHandler):
def get(self):
self.response.out.write('Hello!')
return
app = webapp2.WSGIApplication([
('/', MainHandler)
], debug=True)
my_module.yaml
application: application_name
module: my_module
version: one
runtime: python27
api_version: 1
threadsafe: true
instance_class: B1
basic_scaling:
max_instances: 1
idle_timeout: 13s
skip_files:
- ^(./)?app.yaml
- ^(./)?app.yml
- ^(./)?index.yaml
- ^(./)?index.yml
- ^(./)?#.#
- ^(./)?.~
- ^(./)?..py[co]
- ^(./)?./RCS/.*
- ^(./)?..
- ^(./)?tests$
- ^(./)?node_modules/.*
- ^(./)?Gruntfile.js
- ^(./)?package.json
handlers:
- url: /.*
script: my_module.app
UPDATE: Решение
Как Авинаш Радж предложить в комментариях, я просто удалили -^(./)? .. от my_module.yaml и он начал работать.
remove '^ (./)? ..' regex stmt .. unescaped dot в регулярном выражении не только соответствует точке, но и соответствует любому одиночному символу. Если вы действительно имеете в виду точку, то избегайте ее, '\. \.' –
Я не знаю, почему вы добавляете много регулярных выражений в раздел skip_files. –
Hi AvinashRaj, на самом деле то, что вы мне предложили, работало. Большое спасибо. Я добавил так много, потому что это часть другого большого проекта, и я просто сохраняю регулярные выражения. – Pedro