2011-02-23 201 views
0

我最近从我的本地web.py/apache设置移动到共享主机 ,我试图匹配我的家庭配置。弹出一个 的问题是OperationalError“MySQL服务器已经消失”。 在互联网上搜索时,遇到此错误 的人往往会在几小时内处于非活动状态。这发生在几秒钟之间我 。MySQL服务器已经消失

我已经确认使用mod_wsgi的应用程序()函数示例,我实际上正在守护程序模式下运行 。但是,有一个问题,涉及我 的是,如果我将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> 
+0

如上所述,切换到引擎的NullPool解决了这个问题。虽然这可能不是一个永久性的解决方案,但它肯定会缓解开发中的问题,直到我需要切换到高流量生产,并且我可以自己花费时间解决服务器配置问题。谢谢。 – voodoogiant 2011-02-28 18:21:34

回答

1

检查文档在:http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

设置processes=1实际离开多处理上,这可能是为什么你得到相同的SQL连接并发访问。

此外,它似乎你正在使用SQLAlchemy,所以也许尝试启用QueuePool或NullPool时使用您的引擎?

+0

在这种情况下,使用'processes = 1'和'wsgi.multiprocess'标志的后续设置为True时,实际上不会有任何区别。它也不会导致多处理被留下,至少不会在mod_wsgi中。唯一的区别是该标志是否设置为True。 – 2011-02-27 06:21:03