Соединение прервано при косвенном запуске. Bottle.py в Ubuntu

Я запускаю локальную веб-службу в Ubuntu на localhost: 8090, написанную с помощью bottle.py. Соединение использует SSL.

Если я запускаю файл main.py из Nautilus или терминала и подключаюсь к https://localhost:8090, все работает нормально.

Когда я выполняю его по ссылке на файл, сценарий .sh или файл .desktop, сервер начинает работать нормально, но когда я перехожу по адресу, firefox сообщает: «Соединение с localhost: 8090 было прервано во время загрузки страницы»

$ telnet 127.0.0.1 8090 дает следующее:

Trying 127.0.0.1...
Connected to 127.0.0.1...
Escape character is '^]'.
Connection closed by foreign host.

$ sudo netstat -ntlupp | grep 8090 дает следующее:

tcp   0   0 127.0.0.1:8090   0.0.0.0:*   LISTEN

iptables по умолчанию

У меня такое ощущение, что он блокирует соединение, когда сервер запускается «косвенно» (ссылка, скрипт или .desktop), поскольку когда я на самом деле нажимаю на файл или запускаю его через терминал, он работает нормально.

Однако я не знаю, где предотвратить блокировку соединения. Любая помощь приветствуется.

Подойдет любой обходной путь, даже если вы просто сделаете вид, что файл запускается непосредственно пользователем.

заранее спасибо


person torels    schedule 21.01.2015    source источник


Ответы (2)


  1. Следите за журналами сервера.
  2. Основное различие между различными методами вызова, вероятно, заключается в текущем рабочем каталоге.
  3. Я думаю, что маловероятно, что конфигурация сети влияет на то, что вы наблюдаете.

В зависимости от сложности вашего веб-приложения может произойти сбой импорта Python, если основной скрипт не запущен из правильного каталога. Это вызовет исключение Python, которое может привести к немедленному сбросу соединения. Я не работал с бутылкой, но другие веб-фреймворки Python различают режим разработки, в котором трассировки Python отображаются в браузере, и рабочий режим, в котором клиенту отправляется ошибка HTTP.

Вот что вам следует сделать, чтобы устранить проблему: запустите сервер с терминала (cd в нужный каталог, затем запустите python application.py). Внимательно следите за stdout и stderr этого серверного процесса при подключении к веб-приложению с помощью браузера.

person Dr. Jan-Philip Gehrcke    schedule 21.01.2015
comment
Он не дает никаких результатов, просто работает на локальном хосте: 8080 бла бла Ctrl-C для выхода. - person torels; 21.01.2015

Хорошо, проблема решена.

Фактически это зависело от того, что текущий рабочий каталог не совпадает с файлом python, на котором запущен сервер WSGI.

Если я запускаю сценарий .sh или ссылку из того же каталога, все работает нормально, а если я даю в сценарии команду cd, все работает плавно.

Спасибо за помощь Жан-Филиппу!

person torels    schedule 21.01.2015
comment
Рад, что помог. Я вижу, что вы новичок в StackOverflow. В идеале вы должны были ответить так: ваш ответ здесь должен был быть комментарием к моему ответу. Было бы неплохо с вашей стороны проголосовать за мой ответ и отметить его как правильный зеленой галочкой :-) - person Dr. Jan-Philip Gehrcke; 22.01.2015