私は tornadoweb + momoko を使用して小さな Web アプリケーションを作成しています。昨日、「Apache Branch」でアプリをテストしましたが、以下のエラーが発生しました:
ERROR:root:Cannot send error response after headers written
ERROR:root:Uncaught exception POST /url/is/here/ (127.0.0.1)
HTTPRequest(protocol='http', host='localhost:8888', method='POST', uri='/url/is/here/', version='HTTP/1.1', remote_ip='127.0.0.1', body='some_data_here', headers={'Content-Length': '96', 'Connection': 'close', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'localhost:8888', 'Accept-Encoding': 'gzip'})
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/tornado/web.py", line 1021, in _stack_context_handle_exception
raise_exc_info((type, value, traceback))
File "/usr/lib/python2.7/site-packages/tornado/stack_context.py", line 259, in _nested
yield vars
File "/usr/lib/python2.7/site-packages/tornado/stack_context.py", line 229, in wrapped
callback(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/momoko/pools.py", line 313, in _io_callback
state = self._conn.poll()
OperationalError: asynchronous connection failed
このメッセージは、以下に示す TestWay ハンドラーに問い合わせると表示されます。
class TestWay(BaseHandler):
@property
def db(self):
if not hasattr(self.application, 'db'):
self.application.db = momoko.AsyncClient({
'host': 'localhost',
'database': 'database_name',
'user': 'user_name',
'password': 'password_here',
'min_conn': 1,
'max_conn': 5,
'cleanup_timeout': 10
})
return self.application.db
@web.asynchronous
@gen.engine
def post(self, *args, **kwargs):
self.db.execute(
"SELECT key FROM table WHERE id = %s AND deleted = false",
(self.get_argument('id', 1),),
callback = (yield gen.Callback('callback_name'))
)
cursor = yield gen.Wait('callback_name')
if cursor is not None:
result = cursor.fetchall()
if len(result) != 0 and len(result[0]) != 0:
response = result[0][0]
else:
response = u'some message'
self.write(response)
self.finish()
このhttp://momoko.61924.nl/examples.htmlのドキュメントを使用しました