سؤال

سياق:أنا أكتب تطبيق قارورة متوسط ​​الحجم (10-15 مشاهدة)، وفي هذه العملية، آمل تنظيم التعليمات البرمجية بطريقة تجعلها قابلة للصيانة والتوسيع بسهولة (ليس ملفًا متجانسًا مثل معظم تطبيقات Flask).

هيكل التطبيق يحاكي توثيق على النحو التالي:

/AwesomeHackings
    /ENV
    /AwesomeHackings
        /models
        /static
        /templates
        /__init__.py
        /awesome.py
        /awesome.cfg
    /Procfile
    /README.MD
    /requirements.txt
    /run.py

مشكلة:لا أستطيع إقناع رئيس العمال بالعمل مع تطبيق قارورة لا يُسمى "التطبيق".أرغب في أن يكون run.py هو نقطة الدخول إلى طلبي.

أنا أستخدم gunicorn + gevent، ويحتوي ملف Procfile الحالي الخاص بي على:

web: gunicorn -w 2 -b 0.0.0.0:$PORT -k gevent app:run

لقد كنت استخدم run.py لاختبار التطبيق:

from AwesomeHackings import awesome
awesome.app.run(debug=True)

وهكذا افترضت أنه يمكنني ببساطة الاستبدال run ل app في Procfile، ولكن عند التنفيذ foreman start ، فشل gunicorn بإسهاب لا معنى له حول الوحدات.

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

المحلول

لقد وجدت الحل في وثائق جانغو.المعلمة الرئيسية لـ gunicorn هي الوحدة:

gunicorn [OPTIONS] APP_MODULE

أين APP_MODULE هو من النمط MODULE_NAME:VARIABLE_NAME

في حين أنه يبدو من المنطقي أن يكون بناء الجملة عبارة عن وسيطة للكلمات الرئيسية app:someIdentifier، حيث تستخدم جميع البرامج التعليمية وحدة تسمى app, ، فالأمر ليس كذلك في الحقيقة.وكانت الحجة الصحيحة لموقفي run:app.

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