2011-02-23 6 views
0

최근에 내 로컬 web.py /apache 설치에서 공유 호스트 으로 옮겼으며 집 구성과 일치 시키려고합니다. 이라는 하나의 문제가 발생하면 OperationalError "MySQL 서버가 사라졌습니다."라는 오류가 발생합니다. 인터넷을 검색 할 때이 오류를 경험 한 사람들 은 (는) 시간을 사용하지 못했습니다. 이것은 내게 초 사이에 발생합니다.MySQL 서버가 사라졌습니다.

나는 이 실제로 데몬 모드로 실행된다는 mod_wsgi의 application() 함수 예제를 사용하여 확인했습니다. 그래도 문제가 하나 있는데, 저에 관한 걱정은 입니다. 오류 로그에 web.ctx.orm을 보내면 각 요청에 대해 새 개체 인 것으로 보입니다. 내 sqlalchemy 세션 객체가 페이지 요청 사이에 동일한 이 아니어야합니까?

여기 내 파이썬 코드와 아파치 설정의 일부입니다. 이 새로운 기계에 문제를 일으킬만한 것이 있습니까? 전에 내 집에 기계가 있습니까?

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() 

여기는 내 아파치 설정의 일부입니다. 에서

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

답변

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로 설정되었는지 여부입니다. –

관련 문제