(How Antigravity Diagnosed and Fixed the Cloud Deployment Remotely)
এই ডকুমেন্টেশনে ব্যাখ্যা করা হয়েছে কীভাবে একজন এআই কোডিং অ্যাসিস্ট্যান্ট হিসেবে লোকাল এনভায়রনমেন্ট থেকে সরাসরি ক্লাউড প্ল্যাটফর্মের (PythonAnywhere) অভ্যন্তরীণ সিস্টেমের সমস্যাগুলো ডায়াগনোজ ও ফিক্স করা হয়েছে।
graph TD
A[User Request / Error Report] --> B[Retrieve API Token from Local Env Settings]
B --> C[Fetch Remote Webapp Details]
C --> D[Retrieve & Stream Live Error Logs / Server Logs]
D --> E[Identify Runtime Exception e.g., TypeError / ModuleNotFoundError]
E --> F[List Installed Remote Site-Packages via File API]
F --> G[Detect Missing Dependency e.g., a2wsgi / asgiref]
G --> H[Open Console & Trigger Automated Pip Commands]
H --> I[Re-pack & Upload Hotfix Zip with Missing Directories]
I --> J[Reload Webapp & Perform End-to-End Health-Check]
সমস্যা সমাধানের জন্য আমরা কোনো ভিজ্যুয়াল ব্রাউজার ব্যবহার করিনি। ক্লাউডের অভ্যন্তরীণ ফাইল স্ট্রাকচার এবং মেটাডাটা পরীক্ষা করতে সরাসরি PythonAnywhere REST API ব্যবহার করা হয়েছে।
- অথরাইজেশন টোকেন রিট্রিভাল: লোকাল প্রোজেক্টের গোপন কনফিগারেশন ফাইল (
googleDrive/env) থেকে PythonAnywhere এপিআই টোকেনটি রিড করা হয়। - সোর্স ও ভার্চুয়াল এনভায়রনমেন্ট কনফিগারেশন চেক:
এটি থেকে জানা গেছে যে সার্ভারটি
requests.get('https://www.pythonanywhere.com/api/v0/user/storealco/webapps/storealco.pythonanywhere.com/')
/home/storealco/Alco-Depot-Data-Extractorডিরেক্টরি থেকে রান করছে এবংalco_envভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করছে।
সাইট লোড না হওয়ার প্রকৃত কারণ জানার জন্য আমরা রিমোট সার্ভারের লাইভ এরর লগ এবং রানিং সার্ভার লগ এপিআই-এর মাধ্যমে রিড করেছি:
- এরর লগ রিড করার এপিআই কমান্ড:
requests.get('https://www.pythonanywhere.com/api/v0/user/storealco/files/path/var/log/storealco.pythonanywhere.com.error.log')
- কী ত্রুটি পাওয়া গিয়েছিল?
- প্রথমত:
ModuleNotFoundError: No module named 'asgiref'(ডিপেন্ডেন্সি সমস্যা)। - দ্বিতীয়ত:
TypeError: FastAPI.__call__() missing 1 required positional argument: 'send'(ASGI/WSGI প্রটোকল অমিল)। - তৃতীয়ত:
TypeError: WsgiToAsgi.__call__() missing 1 required positional argument: 'send'(অ্যাডাপ্টার রিকোয়েস্ট মিসিং)।
- প্রথমত:
সার্ভারে প্রকৃতপক্ষে কোন কোন লাইব্রেরি ইনস্টল করা আছে তা নিশ্চিত হতে alco_env এর site-packages ডিরেক্টরি স্ক্যান করা হয়েছে:
requests.get('https://www.pythonanywhere.com/api/v0/user/storealco/files/tree/?path=/home/storealco/.virtualenvs/alco_env/lib/python3.12/site-packages/')এটি রান করার পর দেখা যায় যে asgiref বা a2wsgi কোনো মডিউলই পূর্বে ইনস্টল করা ছিল না।
- কোড প্যাচিং:
asgiref.wsgi.WsgiToAsgiএর জায়গায় এন্টারপ্রাইজ স্ট্যান্ডার্ডa2wsgi.ASGIMiddlewareব্যবহার করে লোকাল ফাইলগুলোতে (wsgi_for_storealco.pyএবংwsgi_universal.py) কোড আপডেট করা হয়। - ডিপ্লয়মেন্ট স্ক্রিপ্ট আপডেট: দেখা যায় যে মূল
deploy.pyফাইলেTOP_FIELD_FORCEফোল্ডারটি প্যাকেজ করার তালিকায় অন্তর্ভুক্ত ছিল না। আমরা স্ক্রিপ্টটি সংশোধন করে ফোল্ডারটি জিপে যোগ করি এবং সফলভাবে আপলোড করি। - ওয়েব অ্যাপ রিলোড:
requests.post('https://www.pythonanywhere.com/api/v0/user/storealco/webapps/storealco.pythonanywhere.com/reload/')
না। এটি ক্লাউড এবং লোকাল যেকোনো ডিস্ট্রিবিউটেড সিস্টেমের ক্ষেত্রেই প্রযোজ্য।
- ক্লাউড কেস (Cloud Cases): ক্লাউডের ক্ষেত্রে আমরা এপিআই (REST API/SSH) ব্যবহার করে রিমোট ডায়াগনস্টিকস চালাই, কারণ ক্লাউড সিস্টেমে সরাসরি কোনো স্ক্রিন বা মনিটর থাকে না।
- লোকাল কেস (Local Cases): লোকাল সিস্টেমে ডায়াগনস্টিকস চালানোর জন্য সরাসরি লোকাল টার্মিনাল প্রসেস (
pwsh,cmd, বাbash), ওএস ফাইল সিস্টেম অ্যাক্টিভিটি ট্র্যাকিং এবং ইন্টারনাল পোর্ট স্ক্যানিং পদ্ধতি ব্যবহার করা হয়।