为什么我的 tornado 应用程序不工作?(tornado-blog with aiomysql)
Why doesn't my tornado application work?(tornado-blog with aiomysql)
import tornado.ioloop
import tornado.web
import tornado.options
import tornado.locks
import os.path
from tornado.options import define, options
from aiomysql import create_pool
define("port", default=8080, help="run on the given port", type=int)
define("db_host", default="localhost", help="blog database host")
define("db_port", default=3306, help="blog database port")
define("db_database", default="{db_name}", help="blog database name")
define("db_user", default="{db_user}", help="blog database user")
define("db_password", default="{password}", help="blog database password")
async def maybe_create_tables(db):
async with db.acquire() as conn:
async with conn.cursor() as cur:
try:
await cur.execute("SELECT COUNT(*) FROM user LIMIT 1")
await cur.fetchone()
except Exception as e:
with open("schema.sql") as f:
schema = f.read()
await cur.execute(schema)
class Application(tornado.web.Application):
def __init__(self, db):
self.db = db
handlers = [
(r"/", HomeHandler),
(r".*", BaseHandler)
]
settings = dict(
debug=True
)
super(Application, self).__init__(handlers, **settings)
class BaseHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header("Server", "tornado")
class HomeHandler(BaseHandler):
async def get(self):
self.write("hello")
async def main():
tornado.options.parse_command_line()
async with create_pool(
host=options.db_host,
port=options.db_port,
user=options.db_user,
password=options.db_password,
db=options.db_database,
) as db:
await maybe_create_tables(db)
app = Application()
app.listen(options.port)
shutdown_event = tornado.locks.Event()
await shutdown_event.wait()
if __name__ == "__main__":
tornado.ioloop.IOLoop.current().run_sync(main)
我从这里复制了这些代码(https://github.com/xzhdream/tornado-blog-aiomysql/blob/master/blog.py),但它不起作用。
当我 运行 这个应用程序时,没有输出错误,但控制台被冻结了。 Mysql 和 Mysql 用户设置必须正确完成。我检查了很多次。
您的 Application.__init__
接受了一个 db
参数,但您在调用 Application
时没有传递一个参数。我不知道为什么您没有收到有关此问题的任何错误回溯。
await shutdown_event.wait()
调用在async with create_pool
之外,所以数据库连接池会在初始化完成后立即关闭,在服务器启动时不可用运行。缩进这些行,以便它们包含在 async with
块中。
import tornado.ioloop
import tornado.web
import tornado.options
import tornado.locks
import os.path
from tornado.options import define, options
from aiomysql import create_pool
define("port", default=8080, help="run on the given port", type=int)
define("db_host", default="localhost", help="blog database host")
define("db_port", default=3306, help="blog database port")
define("db_database", default="{db_name}", help="blog database name")
define("db_user", default="{db_user}", help="blog database user")
define("db_password", default="{password}", help="blog database password")
async def maybe_create_tables(db):
async with db.acquire() as conn:
async with conn.cursor() as cur:
try:
await cur.execute("SELECT COUNT(*) FROM user LIMIT 1")
await cur.fetchone()
except Exception as e:
with open("schema.sql") as f:
schema = f.read()
await cur.execute(schema)
class Application(tornado.web.Application):
def __init__(self, db):
self.db = db
handlers = [
(r"/", HomeHandler),
(r".*", BaseHandler)
]
settings = dict(
debug=True
)
super(Application, self).__init__(handlers, **settings)
class BaseHandler(tornado.web.RequestHandler):
def set_default_headers(self):
self.set_header("Server", "tornado")
class HomeHandler(BaseHandler):
async def get(self):
self.write("hello")
async def main():
tornado.options.parse_command_line()
async with create_pool(
host=options.db_host,
port=options.db_port,
user=options.db_user,
password=options.db_password,
db=options.db_database,
) as db:
await maybe_create_tables(db)
app = Application()
app.listen(options.port)
shutdown_event = tornado.locks.Event()
await shutdown_event.wait()
if __name__ == "__main__":
tornado.ioloop.IOLoop.current().run_sync(main)
我从这里复制了这些代码(https://github.com/xzhdream/tornado-blog-aiomysql/blob/master/blog.py),但它不起作用。 当我 运行 这个应用程序时,没有输出错误,但控制台被冻结了。 Mysql 和 Mysql 用户设置必须正确完成。我检查了很多次。
您的
Application.__init__
接受了一个db
参数,但您在调用Application
时没有传递一个参数。我不知道为什么您没有收到有关此问题的任何错误回溯。await shutdown_event.wait()
调用在async with create_pool
之外,所以数据库连接池会在初始化完成后立即关闭,在服务器启动时不可用运行。缩进这些行,以便它们包含在async with
块中。