محتوای آموزشی وبلاگ نتآرام
برنامه FastAPI روی رایانه شما باز میشود، اما در پنل هاست فقط درباره Python و WSGI صحبت شده است. آیا میتوان همان فایل را مستقیم به پنل داد؟ پاسخ به روش اجرای سرویس بستگی دارد. FastAPI یک برنامه ASGI است و برای اجرای معمول آن به محیطی نیاز دارید که این رابط را پشتیبانی کند.
وجود نام «هاست پایتون» به تنهایی ثابت نمیکند همه حالتهای ASGI، پردازش دائمی یا WebSocket در آن سرویس فعالاند. قبل از انتقال سایت، نیاز برنامه و امکانات واقعی سرویس را با یک آزمایش ساده و سؤالهای مشخص روشن کنید.
۱. ASGI و WSGI را ساده بشناسید
این دو، قرارداد ارتباطی بین برنامه پایتون و سرور اجراکننده آن هستند. WSGI رابط قدیمیتر رایج برای برنامههای وب همگام است. ASGI برای سناریوهای غیرهمگام و ارتباطهایی مانند WebSocket نیز طراحی شده است. نام این رابطها به تنهایی تضمین نمیکند یک برنامه در همه شرایط سریعتر یا مناسبتر است؛ کتابخانه، کد و منابع سرویس نیز مهماند.
FastAPI معمولاً با سرور ASGI مانند Uvicorn اجرا میشود. بعضی محیطها ممکن است مبدل یا روش ترکیبی داشته باشند، اما سازگاری همه قابلیتها، بهویژه WebSocket و طول عمر اتصال، باید جداگانه تأیید شود. فایل WSGI پروژه دیگری را به جای برنامه FastAPI کپی نکنید.
۲. برنامه نمونه را فقط روی رایانه آزمایشی بسازید
این مثال برای یادگیری است و وابستگیهای
کد / دستورfastapi و uvicorn باید از منبع معتبر در محیط مجازی آزمایشی نصب شده باشند. فایل app.py را در یک پوشه جدید بسازید:from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"status": "ok"}
در ترمینال همان پوشه، مفسر و بستهها را ببینید:
کد / دستورpython --version
python -m pip show fastapi uvicorn
اگر بستهها در محیط آزمایشی نصب نیستند، آنها را مطابق نسخههای تأییدشده پروژه و فایل نیازمندی معتبر نصب کنید. فایل نیازمندی ناشناس را اجرا نکنید و برای پروژه اصلی نسخه تصادفی همه بستهها را تغییر ندهید.
۳. سرور محلی را اجرا و پاسخ را آزمایش کنید
در همان محیط آزمایشی:
کد / دستورpython -m uvicorn app:app --host 127.0.0.1 --port 8000
عبارت پیش از
کد / دستور: نام فایل بدون .py و عبارت بعد از آن نام شیء برنامه است. این نمونه به 127.0.0.1 محدود شده و برای دسترسی عمومی طراحی نشده است. در ترمینال دوم همان سیستم:curl -i http://127.0.0.1:8000/health
پاسخ موفق باید وضعیت HTTP مناسب و
{"status":"ok"} داشته باشد. پس از آزمون، در ترمینال اول Ctrl+C بزنید. اگر Address already in use دیدید، یک پورت آزاد مناسب محیط آزمایشی انتخاب کنید. موفقیت این تست فقط نشان میدهد برنامه روی همان محیط محلی اجرا میشود، نه اینکه پنل هاست نیز اجرای ASGI را پشتیبانی میکند.اگر پیام
Could not import module ظاهر شد، نام فایل و پوشه اجرای فرمان را با app:app مقایسه کنید. برای فایلی در یک بسته پایتون، مسیر import میتواند شکل دیگری داشته باشد. اگر خطا از داخل خود فایل یا وابستگی آن است، چند خط بعدی traceback علت دقیقتری میدهد. نصب بسته در یک Python دیگر یا تغییر نام فایل بدون اصلاح importها مشکل محیط را حل نمیکند.۴. پیش از انتقال از سرویس چه بپرسیم؟
نسخه Python مورد نیاز، پشتیبانی صریح از ASGI و روش ثبت فایل شروع را مشخص کنید. اگر WebSocket، کار پسزمینه طولانی یا اتصال پایگاه داده خصوصی دارید، پشتیبانی و محدودیت همان قابلیت را جداگانه بپرسید. بررسی کنید فرایند برنامه چگونه پس از قطع یا راهاندازی مجدد مدیریت میشود و پراکسی چه محدودیت زمانی و پورتی دارد.
در هاست اشتراکی نباید بدون اجازه پورت عمومی باز کنید یا یک فرایند دائمی خارج از سازوکار پنل اجرا کنید. اگر سرویس فقط WSGI را پشتیبانی میکند و برنامه به ASGI نیاز دارد، از ارائهدهنده درباره محیط سازگار بپرسید؛ تغییر پسوند فایل یا نام متغیر برنامه، رابط را تبدیل نمیکند.
۵. استقرار و آزمون نهایی
اگر محیط ASGI پشتیبانی میشود، وابستگیها را از فایل تأییدشده در محیط برنامه نصب و مسیر شروع و تنظیمات را طبق راهنمای همان سرویس ثبت کنید. اطلاعات محرمانه را در متغیرهای امن سرویس نگه دارید. پس از راهاندازی نسخه آزمایشی، مسیر
/health و سپس قابلیت واقعی برنامه را از نشانی مورد انتظار امتحان کنید. اگر WebSocket دارید، یک اتصال WebSocket واقعی هم لازم است؛ پاسخ HTTP موفق به تنهایی آن را ثابت نمیکند.اگر مشکل از پیدا نشدن بسته است، راهنمای ModuleNotFoundError را ببینید. امکانات هاست پایتون نتآرام را با نیاز برنامه تطبیق دهید و شیوه اجرای ASGI را در مستندات FastAPI بخوانید.
برچسبها:
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
