2012-05-21 1 views
2

으로 배포 된 간단한 Flask 앱에서 flask-zodb을 사용하는 중에 문제가 있습니다. flask-zodb를 사용하는 LockError

from flaskext.zodb import zodb, List 

db = ZODB(app) 
app.config.from_pyfile('settings.py') # here I have defined ZODB_STORAGE = "/home/username/webapps/myapp/htdocs/Data.fs" 

@app.before_request 
def set_db_defaults(): 
    if 'entries' not in db: 
     db['entries'] = List() 

또는 같은 관점에서

:

[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1] 
self._lock_file = LockFile(file_name + '.lock') 
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1] File 
"/home/userame/.virtualenvs/myapp/lib/python2.7/site-packages/zc/lockfile/__init__.py", 
line 76, in __init__ 
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1]  _lock_file(fp) 
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1] File 
"/home/username/.virtualenvs/myapp/lib/python2.7/site-packages/zc/lockfile/__init__.py", 
line 59, in _lock_file 
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1]  raise 
LockError("Couldn't lock %r" % file.name) 
[Sat May 19 16:52:30 2012] [error] [client 127.0.0.1] LockError: 
Couldn't lock '/home/username/webapps/myapp/htdocs/Data.fs.lock' 

응용 프로그램이 작동 :

@app.route('/add', methods=['POST']) 
def add_entry(): 
    db['entries'].append(request.form) 
    flash('New entry was successfully posted') 
    return redirect(url_for('show_entries')) 

나는 다음과 같은 오류가 발생했습니다 때마다 나는 예를 설정 기본값에 대한 DB를 사용하려고 개발 환경에서 문제가 없으며 설정하려고 시도한 이후로 전제 문제가 있다고 생각하지 않습니다.

ZODB_STORAGE = "/tmp" 

그리고 같은 예외가 발생합니다. 왜 이런 일이 일어나고 이런 종류의 오류를 피하는 지 이해할 수 없습니다. 어떤 아이디어?

답변

4

여러 프로세스에서 ZODB를 열려고합니다. 아마도 개발 과정에서 하나의 WSGI 프로세스 만 사용하게됩니다. 이것은 기본적으로 zc.lockfile.LockError in ZODB의 속입니다.

옵션은 다음과 같습니다 하나의 프로세스 만에

  1. 제한 프로덕션 환경.

  2. ZEO를 사용하십시오. 참조 된 질문을 참조하십시오. zodburi equivalentzeo://localhost:9100입니다.

  3. RelStorage를 사용하십시오. RelStorage 난을 사용할 수있는 경우 ZConfig URI scheme을 사용하여 연결할 수 있습니다. 이 내용은 RelStorage 문서 old repoze.zodbconn name에 설명되어 있습니다.