2015-11-07 26 views
0

Я разрабатываю систему знакомств с gae и python. Я нашел последовательную систему автоматического совпадения, и я нашел очередь задач. Я выполнил задание cron для запуска очереди каждые 10 минут. Однако я получаю следующее сообщение об ошибке:Ошибка очереди задач Google App Engine

When running /queue_generator: 
Traceback (most recent call last): 
File"/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle 
    result = handler(dict(self._environ), self._StartResponse) 
TypeError: 'module' object is not callable 

Код, который у меня есть: (SessionID это просто модель БД) queue_generator.py

import webapp2, time 
from main import SessionID 
from google.appengine.api import taskqueue 
from google.appengine.ext import db 

class Game(db.Model): 
    Users = db.ListProperty(str) 
    Score = db.IntegerProperty() 
    Turn = db.StringProperty() 
class MainHandler(webapp2.RequestHandler): 
    def get(self): 
     taskqueue.add(url='/matchcreator',params={"id":str(time.time())}) 

class Gamegenerator(webapp2.RequestHandler): 
    def get(self): 
     while True: 
      q = Queue.get() 
      if len(q.queue) >= 4: 
       sids = [] 
       for i in range(0,3): 
        sids.append(q.queue[i]) 
        q.queue.remove(i) 
        q.put() 
     return self.response.set_status(204) 
    def post(self): 
     while True: 
      q = Queue.get() 
     if len(q.queue) >= 4: 
      sids = [] 
      for i in range(0,3): 
       sids.append(q.queue[i]) 
       q.queue.remove(i) 
       q.put() 
    return self.response.set_status(204) 

app = webapp2.WSGIApplication([ 
    ('/queue_generator', MainHandler), 
    ("/matchcreator",Gamegenerator) 
], debug=True) 

Почему это встречающаяся ошибка?

Редактировать

app.yaml

application: brobbinsgame 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: yes 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 
- url: /css 
    static_dir: css 
- url: /home.css 
    static_files: style.css 
    upload: style.css 
    application_readable: true 
- url: /register 
    script: register.app 
- url: /logout 
    script: logout.app 
- url: /line 
    script: line.app 

- url: /queue_generator 
    script: queue_generator 
    login: admin 
- url: /home 
    script: home.app 
- url: /resetsid 
    script: resetsid.app 
    login: admin 
- url: .* 
    script: main.app 

libraries: 
- name: webapp2 
    version: "2.5.2" 
- name: pycrypto 
    version: "latest" 
+0

Показать свой app.yaml, пожалуйста. –

+0

@ DanielRoseman добавлен. – Dashadower

ответ

1

Для каждого пути, кроме «/ queue_generator», вы правильно указали объект app. Но для этого одного пути вы напрямую ссылаетесь на модуль. Вам необходимо определить его точно так же:

- url: /queue_generator 
    script: queue_generator.app 
    login: admin 

Также обратите внимание, что нет способа добраться до «/ matchcreator»: «/ queue_generator» - единственный URL-адрес, который будет перенаправлен в этот файл. Вам нужно либо выставить «/ matchcreator» в app.yaml, либо сделать более обычную вещь, которая должна маршрутизировать все пути к главному приложению, которое импортирует все обработчики и определяет определенную маршрутизацию там.

+0

Спасибо! Как я могу открыть/matchcreator в app.yaml, поэтому, если я перейду к URL-адресу http: ///...appspot.com/matchcreator, тогда он отобразит класс matchcreator? – Dashadower

+0

Точно так же, как вы открыли все другие пути. –

0

Эта ошибка возникает из-за вы вызываете модуль вместо класса .. вызов должен быть: Module.Class.Method()

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