2011-02-23 173 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