اسم الوحدة المخصصة لـ Procfile gunicorn
سؤال
سياق:أنا أكتب تطبيق قارورة متوسط الحجم (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
.