MySQL服务器已断开连接
我最近从本地的 web.py/apache 环境转到了一个共享主机上,想要把家里的配置搬过来。但是现在遇到了一个问题,就是出现了一个叫“MySQL 服务器已断开连接”的错误。网上查了一下,很多遇到这个错误的人都是因为长时间不活动导致的,而我却是几秒钟就会出现一次。
我确认过,使用 mod_wsgi 的 application() 函数示例,我确实是在守护进程模式下运行。不过,有一个问题让我很担心,就是如果我把 web.ctx.orm 输出到错误日志中,每次请求似乎都是一个新的对象。难道我的 sqlalchemy 会话对象在页面请求之间不应该是同一个吗?
这是我的 Python 代码和一部分 Apache 的设置。请问在这个新机器上,有什么可能导致问题的地方是我在家里的机器上没有遇到的吗?
def load_sqla(handler):
web.ctx.orm = scoped_session(sessionmaker(bind=engine))
try:
try:
return handler()
except web.HTTPError:
web.ctx.orm.commit()
raise
except:
web.ctx.orm.rollback()
raise
finally:
web.ctx.orm.commit()
# If the above alone doesn't work, uncomment
# the following line:
web.ctx.orm.expunge_all()
... urls and controllers ...
app = web.application(urls, globals(), autoreload=False)
app.add_processor(load_sqla)
application = app.wsgifunc()
这是我 Apache 设置的一部分。
WSGIDaemonProcess app processes=1 threads=1 python-path=/home/net/
public_html/myapp
WSGIProcessGroup app
WSGIScriptAlias /myapp /home/net/public_html/myapp/managio.py
<Directory "/home/stratton/public_html/myapp">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
allow from all
</Directory>
1 个回答
1
可以查看这个文档:http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess
设置 processes=1
实际上还是开启了多进程,这可能是你为什么会同时访问同一个 SQL 连接的原因。
另外,看起来你在使用 SQLAlchemy,所以在创建引擎的时候,可以试着开启 QueuePool 或 NullPool 的使用。