سؤال

لدي مشكلة في استخدام قارورة-zodb بطريقة بسيطة قارورة تم نشر التطبيق مع mod_wsgi.في كل مرة أحاول استخدام قاعدة البيانات على سبيل المثال تعيين الإعدادات الافتراضية:

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

أو في عرض مثل:

@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'))

حصلت على الخطأ التالي:

[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'

يعمل التطبيق بشكل جيد في بيئة التطوير ولا أعتقد أن هناك مشكلة في الإذن منذ أن حاولت تعيين:

ZODB_STORAGE = "/tmp"

ويرفع نفس الاستثناء.لا أستطيع أن أفهم سبب حدوث ذلك وكيفية تجنب هذا النوع من الأخطاء.أيه أفكار؟

هل كانت مفيدة؟

المحلول

أنت تحاول فتح ZODB من عمليات متعددة؛من المفترض أنك تستخدم عملية WSGI واحدة فقط أثناء التطوير.هذا هو في الأساس خدعة zc.lockfile.LockError في ZODB.

خياراتك هي:

  1. قم بقصر بيئة الإنتاج الخاصة بك على عملية واحدة فقط.

  2. استخدم ZEO، راجع السؤال المشار إليه؛ال ما يعادل زودبوري يكون zeo://localhost:9100.

  3. استخدم ريلستوراج.يمكنك استخدام ال مخطط ZConfig URI للاتصال، بشرط توفر بيضة RelStorage.تم توثيق ذلك في وثائق RelStorage ضمن قديم repoze.zodbconn اسم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top