Найти - Пользователи
Полная версия: Запуск сервера Tornado
Начало » Web » Запуск сервера Tornado
1 2 3
dbogdanoff
Имеется VPS-сервер CentOS 6.6, Python 2.6
На нём есть десяток работающих сайтов на php, связка серверов apache/nginx
Это немного о сервере.

В целом с web-технологиями знаком и в сфере работаю давно, но Python изучаю недавно.
Сейчас передо мной стоит задача запустить сервер Tornado на Python'е и вывезти ‘Hello, World’ в браузере пользователя. В будущем хочу попробовать Tornado как websocket.

И мне понадобилась помощь, так как Tornado пока не поддаётся.
Скачал Tornado с сайта http://tornado.readthedocs.org/en/stable/
Выполнил установку:
tar xvzf tornado-4.3.tar.gz
cd tornado-4.3
python setup.py build
python setup.py install

Создаю app.py:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")
def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])
if __name__ == "__main__":
    app = make_app()
    app.listen(9000)
    tornado.ioloop.IOLoop.current().start()

Запускаю:
python app.py
Приложение запускается без ошибок, вывода на экран никаких сообщений нет.

Далее открываю браузер и ввожу IP сервера http://213.136.83.249:9000/
Страница долго пытается загрузиться и выпадает с ошибкой:
ERR_CONNECTION_TIMED_OUT

80 и 8888 порты заняты nginx'ом и апачем, соответственно.

Далее возвращаюсь в терминал и прерываю выполнение программы Ctrl+C, после чего вижу, как я понял, исключительную ошибку:
Traceback (most recent call last):
  File "app.py", line 29, in <module>
    tornado.ioloop.IOLoop.current().start()
  File "/root/tornado/tornado-4.3/tornado/ioloop.py", line 858, in start
    event_pairs = self._impl.poll(poll_timeout)
KeyboardInterrupt

Подскажите, что не так?
dbogdanoff
Если вызвать demo-приложение helloworld.py поставляемое с сервером Tornado, то картина примерно та же:

helloworld.py:
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8686, help="run on the given port", type=int)
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")
def main():
    tornado.options.parse_command_line()
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()
if __name__ == "__main__":
    main()

Ctrl+C:
Traceback (most recent call last):
  File "demos/helloworld/helloworld.py", line 43, in <module>
    main()
  File "demos/helloworld/helloworld.py", line 39, in main
    tornado.ioloop.IOLoop.current().start()
  File "/usr/lib64/python2.6/site-packages/tornado-4.3-py2.6-linux-x86_64.egg/tornado/ioloop.py", line 858, in start
    event_pairs = self._impl.poll(poll_timeout)
KeyboardInterrupt
4kpt_III
dbogdanoff
http://213.136.83.249:9000/

Попробуйте.

http://127.0.0.1:9000/
dbogdanoff
В работе используется удалённый Web-сервер https://contabo.com/?show=configurator&vserver_id=145
Не локально!
4kpt_III
А локально он работает?
dbogdanoff
Локально и не пробовал.
Моя машина под управлением windows, полагаю, что это не проблема, но локально мне задачу не надо решать.
4kpt_III
Понимаете, я никогда не сталкивался с такой ошибкой, сколько не использовал торнаду. Поэтому хотел определить, что проблема именно на сервере. Если он локально работает, а на сервере нет - значит нужно копать настройки. Нашел только это

P.S. Проверил. Работает без проблем.
dbogdanoff
Настройки, возможно…
Мне также сейчас главное выявить, правильно ли я понял вообще принцип запуска сервера, что я запускаю файл в терминале и сразу же могу стучаться на сервер. Всю жизнь работал с apache, nginx и для меня это ой как непривычно



Другие файлы в списке на скриншоте, это я пробовал разные способы сборки из интернета.
На скриншоте видно, что я запустил файл app.py после чего делаю http-запрос с браузера.
Там вижу упомянутую выше ошибку и прерываю выполнение Ctrl+C
4kpt_III
Неее. Это неправильно, естественно. Хотя вам сначала нужно его нормально заставить работать.
У меня в проектах торнаду держит supervisor. Он и поднимает, торнаду, если она упадет.
Period
KeyboardInterrupt означает, что вы прервали выполнение скрипта сочетанием клавиш Ctrl+C. К вашей проблеме это не имеет отношения.

Что там с файрволлом у вас? Очень похоже именно на его работу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB