Форум сайта python.su
0
fata1ex
Вам же пишут, что ошибка при работе с сокетом. А вообще, программист, который при ошибке ‘broken pipe’ начинает работать с шаблонами, вызывает подозрительния )
Попробуйте написать в список рассылки flask или опишите _полностью_ построенную систему. Довольно сложно понять, что у вас там и как. Но думается мне, проблема не во фреймворке.
LoadModule wsgi_module modules/mod_wsgi.so
... Include conf.d/*.conf ..... WSGIScriptAlias /py /var/www/html/py/hello.py
#!/usr/bin/env python #-*-coding: utf-8 import os,cx_Oracle,pymssql import flask import unittest import tempfile #Импортируем класс Flask from flask import Flask from flask import render_template DEBAG=True #Создаём экземпляр app класса Flask. Экземлаяр в данном случае уже является WSGI #приложением app = Flask(__name__) #это блок куда записывать функции @app.route('/index.html', methods=['GET']) def funOracle(): connection = cx_Oracle.connect("user","pwd","ip_adrr/name1BD") cursor = connection.cursor() cursor.execute("SELECT * FROM table where pole=znachenie") date=cursor.fetchall() p='' for rec in date: p=p+str(rec) connection.close() p.decode('string_escape') return render_template('index.html',keyone=str(p)) def funMSSQL(): conn = pymssql.connect( user = 'user', password = 'pwd', host = 'namehost', database = 'name2BD') cur=conn.cursor() cur.execute('SELECT * FROM table10') data=cur.fetchall() s='' for rec in data: s=s+str(rec) conn.close() return render_template('index.html',keytwo=s) #этот блок запускает на исполнение наше WSGI приложение, причём так,чтобы клиенты ЛВС #запустить это приложение тоже. if __name__ == '__main__': app.run(debug=True, host='0.0.0.0')
<!doctype html> <title> Стартовая страница </title> <p><h1> Стартовая страница</h1></p> <table> <tr> <th>Ответ на запрос Oracle</th> </tr> <tr> {% if keyone %} <th>{{keyone}}</th> {% else %} <th>Результат запроса не передан шаблону в виде ключа keyone</th> {% endif %} </tr> <tr> <th>Ответ на запрос MS SQL</th> </tr> <tr> {% if keytwo %} <th>{{keytwo}}</th> {% else %} <th>Результат запроса не передан шаблону в виде ключа keytwo</th> {% endif %} </tr>
var/www/html/py/templatesbody { font-family: sans-serif; background: #eee; } a, h1, h2 { color: #377BA8; } h1, h2 { font-family: 'Georgia', serif; margin: 0; } h1 { border-bottom: 2px solid #eee; } h2 { font-size: 1.2em; } .page { margin: 2em auto; width: 35em; border: 5px solid #ccc; padding: 0.8em; background: white; } .entries { list-style: none; margin: 0; padding: 0; } .entries li { margin: 0.8em 1.2em; } .entries li h2 { margin-left: -1em; } .add-entry { font-size: 0.9em; border-bottom: 1px solid #ccc; } .add-entry dl { font-weight: bold; } .metanav { text-align: right; font-size: 0.8em; padding: 0.3em; margin-bottom: 1em; background: #fafafa; } .flash { background: #CEE5F5; padding: 0.5em; border: 1px solid #AACBE2; } .error { background: #F0D6D6; padding: 0.5em; }
[root@ser py]#/etc/init.d/httpd start Starting httpd: [OK] [root@ser py]#
[root@ser py]# python hello.py * Running on http://0.0.0.0:5000/ * Restarting with reloader...
[root@ser py]# wget 'http://127.0.0.1:5000/index.html' --2012-03-30 19:35:15-- http://127.0.0.1:5000/index.html Устанавливается соединение с 127.0.0.1:5000... соединение установлено. Запрос HTTP послан, ожидается ответ... 500 INTERNAL SERVER ERROR 2012-03-30 19:35:20 ОШИБКА 500: INTERNAL SERVER ERROR. [root@ser py]#
[root@ser py]# python hello.py * Running on http://0.0.0.0:5000/ * Restarting with reloader... 127.0.0.1 - - [30/Mar/2012 19:35:20] "GET /index.html HTTP/1.0" 500 - ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 43539) Traceback (most recent call last): File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock self.process_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__ self.finish() File "/usr/lib/python2.6/SocketServer.py", line 661, in finish self.wfile.flush() File "/usr/lib/python2.6/socket.py", line 303, in flush self._sock.sendall(buffer(data, write_offset, buffer_size)) error: [Errno 32] Broken pipe ----------------------------------------
Отредактировано Novichek (Апрель 5, 2012 07:13:03)
Офлайн
19
Novichek
В краткости вроде всё описал. У кого есть мысли по разрешению данного вопроса?
Отредактировано cutwater (Апрель 5, 2012 08:14:53)
Офлайн
0
я попробовал просто написать скрипт такого содержания,который просто должен выдать ключ='hello word' в шаблон:
скрипт primer.py
#!/usr/bin/env python #-*-coding: utf-8 import os import flask import unittest import tempfile from flask import Flask from flask import render_template app = Flask(__name__) @app.route('/index.html', methods=['GET']) def fun1: p='Hello word!' p.decode('string_escape') return render_template('index.html',keyone=str(p)) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0')
<!doctype html> <title> Стартовая страница </title> {% if keyone %} <th>{{keyone}}</th> {% else %} <th>Результат запроса не передан шаблону в виде ключа keyone</th> {% endif %} </tr>
[root@ser py]# python primer.py * Running on http://0.0.0.0:5000/ * Restarting with reloader...
[root@ser py]# wget 'http://127.0.0.1:5000/index.html' --2012-04-05 10:58:15-- http://127.0.0.1:5000/index.html Устанавливается соединение с 127.0.0.1:5000... соединение установлено. Запрос HTTP послан, ожидается ответ... 500 INTERNAL SERVER ERROR 2012-04-05 10:58:17 ОШИБКА 500: INTERNAL SERVER ERROR. [root@ser py]#
[root@ser py]# python primer.py * Running on http://0.0.0.0:5000/ * Restarting with reloader... 127.0.0.1 - - [05/Apr/2012 10:58:17] "GET /index.html HTTP/1.0" 500 - ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 43539) Traceback (most recent call last): File "/usr/lib/python2.6/SocketServer.py", line 283, in _handle_request_noblock self.process_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 309, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.6/SocketServer.py", line 322, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python2.6/SocketServer.py", line 618, in __init__ self.finish() File "/usr/lib/python2.6/SocketServer.py", line 661, in finish self.wfile.flush() File "/usr/lib/python2.6/socket.py", line 303, in flush self._sock.sendall(buffer(data, write_offset, buffer_size)) error: [Errno 32] Broken pipe ----------------------------------------
Офлайн
52
cutwater, я прочитал. После прочтения понял, что мы теперь просто обязаны разобраться и понять, что же там не так :)
Вообще, broken pipe может появиться, если клиент отвалился, а сервер не успел или не смог ответить клиенту. Какие-то нелады у вас именно в системе. Можете подождать ответа здесь. Можно попробовать написать на stackoverflow, там народу побольше.
Отредактировано fata1ex (Апрель 5, 2012 10:58:28)
Офлайн
0
Спасибо)и там жду, может что отпишут..и на предложенном сайте тоже отписался…в любом случае если кто знает, в чём может быть причины такой общего характера ошибки-просьба отписать…рано или поздно всё же найдётя причина…и можно будет здесь написать в чём же была соль.
Отредактировано Novichek (Апрель 5, 2012 11:17:42)
Офлайн
52
Единственное, что мне приходит в голову в таких ситуациях - слово “декомпозиция”. Попробуйте с минимального примера наращивать нужную вам систему. Поочередно добавляя компоненты, вы поймете, где же проблема. Удачи!
Если решение настигнет вас, обязательно отпишитесь здесь.
Офлайн
0
fata1exТак собсвенно весь процесс описан…проблема возникла,когда начал использовать именно flask
Единственное, что мне приходит в голову в таких ситуациях - слово “декомпозиция”. Попробуйте с минимального примера наращивать нужную вам систему. Поочередно добавляя компоненты, вы поймете, где же проблема. Удачи!
Если решение настигнет вас, обязательно отпишитесь здесь.
Офлайн
19
Пойдем от противного
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
Отредактировано cutwater (Апрель 5, 2012 20:06:59)
Офлайн
3
Broken pipe тут определенно не с проста!
Никого не смутило что экзепшн на порте 43539, а сервер он запускает на 5000?
Проверьте свой оракл, путем тупого выполнения того когда, который у вас в обработчике http-запроса
Что за порт 43539 не понятно. Похоже это он не СУБД. Если бы проблема была в коде обработчика - в трейсе было бы видно где ошибка. Сместите внимание на wsgi и убейте апач - работайте с фласком напрямую. Возможно это что-то прояснит.
Думаю решение вашей проблемы лежит именно в ключе выяснения что за порт 43539, и почему на нем Broken pipe
Отредактировано alexey-grom (Апрель 6, 2012 00:21:31)
Офлайн
0
Попробовал переустановить Flask,может не правильно что-то установилось:
#yum install python-pip.noarch .... #pip install Flask --upgrade ... #pip --version pip 0.6.3 #python -V >Python 2.6.6
#!/usr/bin/env python #-*-coding: utf-8 app = Flask(__name__) @app.route('/') def hello(): return 'Hello World' app.run()
Офлайн