2016-12-15 5 views
1

У меня работает служба 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 и он начал работать.

+0

remove '^ (./)? ..' regex stmt .. unescaped dot в регулярном выражении не только соответствует точке, но и соответствует любому одиночному символу. Если вы действительно имеете в виду точку, то избегайте ее, '\. \.' –

+0

Я не знаю, почему вы добавляете много регулярных выражений в раздел skip_files. –

+0

Hi AvinashRaj, на самом деле то, что вы мне предложили, работало. Большое спасибо. Я добавил так много, потому что это часть другого большого проекта, и я просто сохраняю регулярные выражения. – Pedro

ответ

1

Я предлагаю вам удалить ^(./)?.. регулярки STMT из раздела skip_files, поскольку неэкранированный точка в регулярном выражении не только совпадает с точкой, но и он соответствует любому символу, который приводит в пропуске любого файла, имеющий по крайней мере две буквы в именах. Если вы действительно имеете в виду точку, то избегайте ее, например, ^(./)?\.\.

+0

Это сработало для меня, я закончил удаление, и appengine начал работать – Pedro

Смежные вопросы