2015-10-02 4 views
0

После урока я написал команду управления для запуска торнадо, и это выглядит как:Джанго торнадо получать 403 ошибки на старте

import signal 
import time 

import tornado.httpserver 
import tornado.ioloop 

from django.core.management.base import BaseCommand, CommandError 

from privatemessages.tornadoapp import application 

class Command(BaseCommand): 
    args = '[port_number]' 
    help = 'Starts the Tornado application for message handling.' 

    def sig_handler(self, sig, frame): 
     """Catch signal and init callback""" 
     tornado.ioloop.IOLoop.instance().add_callback(self.shutdown) 

    def shutdown(self): 
     """Stop server and add callback to stop i/o loop""" 
     self.http_server.stop() 

     io_loop = tornado.ioloop.IOLoop.instance() 
     io_loop.add_timeout(time.time() + 2, io_loop.stop) 

    def handle(self, *args, **options): 
     if len(args) == 1: 
      try: 
       port = int(args[0]) 
      except ValueError: 
       raise CommandError('Invalid port number specified') 
     else: 
      port = 8888 


     self.http_server = tornado.httpserver.HTTPServer(application) 
     self.http_server.listen(port, address="127.0.0.1") 


     # Init signals handler 
     signal.signal(signal.SIGTERM, self.sig_handler) 

     # This will also catch KeyboardInterrupt exception 
     signal.signal(signal.SIGINT, self.sig_handler) 
     print "start" 

     tornado.ioloop.IOLoop.instance().start() 
     print "end" 

Вот я, когда я запускаю эту команду управления я получаю Торнадо tornado.access:403 GET /2/ (127.0.0.1) 1.92ms ошибка

Для целей тестирования я напечатал «начало» и «конец». Я думаю, когда эта команда будет успешно выполнена, «конец» должен быть напечатан.

Здесь только «старт» печатается не «end». Я думаю, что есть ошибка на tornado.ioloop.IOLoop.instance().start(), но я не знаю, что это такое.

Может ли кто-нибудь вести меня, что здесь не так?

ответ

0

Вы забыли поставить self.http_server.start() перед запуском ioloop.

... 
self.http_server = tornado.httpserver.HTTPServer(application) 
self.http_server.listen(port, address="127.0.0.1") 
self.http_server.start() 
... 

Update

Наряду с HTTPServer заскучать, вы используете this library?

Ваша команда управления точно this one

Их учебник в России и если честно, я не читаю России.

Update2:

Что посмотреть в коде, является то, что URL /(?P<thread_id>\d+)/ является WebSocket обработчик:

application = tornado.web.Application([ 
    (r"/", MainHandler), 
    (r'/(?P<thread_id>\d+)/', MessagesHandler), 
]) 

...

class MessagesHandler(tornado.websocket.WebSocketHandler): 
... 

Но ошибка вы вывесили кажется как-то пытался получить доступ к нему через http через GET. Честно говоря, без отладчика и той же среды я не могу понять проблему.

+0

Я получаю ту же ошибку, что я добавил self.http_server.start() – aryan

+0

Я считаю, что мне нужно, чтобы увидеть больше того, что делается в privatemessages.tornadoapp Является ли это: https://github.com/geraldoandradee/chat -2/blob/master/privatemessages/tornadoapp.py? –

+0

yup it is ... но приложение tornado не запускается и сообщение не отправляется в реальном времени – aryan

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