From Frustration to Fix: Conquering Vercel Errors Like a Pro
Tags: vercel, deployment, deploy, express
Published: 2024-05-23 14:48:37

প্রোজেক্ট ডিপ্লয়মেন্ট এর জন্য আমাদের মতো স্টুডেন্টদের জন্য Vercel অন্যতম ভরসা। তবে Vercel এ Frontend প্রোজেক্ট ডিপ্লয় করার প্রসেস সহজ হলেও Backend এর প্রোজেক্ট ডিপ্লয় করতে আমরা অনেক প্রবলেম ফেস করি।  প্রবলেম ফেস করতে করতে আমরা হতাশ হয়ে যায়, আবার অনেক সময় এসাইন্মেন্ট এর ডেডলাইন মিস করি!

তাই এই ব্লগে আমরা Vercel ব্যাবহারের সঠিক উপায় এর কিছু কমন এরর এবং তার সমাধান সম্পর্কে জানার চেষ্টা করব। 

**Vercel কি কি উপায়ে ইউজ করা যায়? কোনটার সুবিধা কি?**

Vercel মূলত তিনটি ভিন্ন উপায়ে ব্যবহার করা যেতে পারে:

- **Vercel CLI:** Vercel CLI হল একটি কমান্ড-লাইন ইন্টারফেস। এর মাধ্যমে অনেক সহজে কিছু কমান্ড  ব্যাবহার করে প্রোজেক্ট ডিপ্লয় করা যায়।
- **Vercel Dashboard:** এই পদ্ধতিতে ভারসেল এর ওয়েবসাইট থেকে  ওয়েব-ভিত্তিক ইন্টারফেস (গ্রাফিকাল ইন্টারফেস) এর মাধ্যমে কিছু প্রসেস অনুসরন করে প্রোজেক্ট ডিপ্লয় করা হয়। এই পদ্ধতিতে CLI এর চেয়ে বেশি ফিচার ইউজ করা যায়।
- **Vercel API:** এটি একটি শক্তিশালী এবং নিয়ন্ত্রণযোগ্য উপায় যায় মাধ্যমে প্রজেক্টগুলির সাথে আরও জটিল ইন্টারঅ্যাকশন  করা যায়।

**Vercel CLI দিয়ে Backend প্রোজেক্ট ডিপ্লয় করার সময় কিছু কমন এরর এবং তার সমাধান:**

- **Build error:** এই এররটি প্রোজেক্টের কোডে কোন ত্রুটি থাকার কারণে হয়। বেশির ভাগ সময় কি সমস্যা হয়েছে তা এররে ম্যানশন করা থাকে। এই এররটি সমাধান করার জন্য, কোডটি চেক করে ত্রুটিগুলি ঠিক করতে হবে।
- **Deployment error:** এই এররটি প্রোজেক্টের সেটিংস বা ইনভাইরন্মেন্টের সমস্যার কারণে হয়। অনেক সময় vercel.json ঠিক ভাবে কনফিগার না করার কারনেও এই ধরনের এরর হয়। এই এররটি সমাধান করার জন্য, প্রোজেক্টের সেটিংস এবং ইনভাইরন্মেন্ট গুলো চেক করতে হবে।
- **Runtime error:** এই এররটি প্রোজেক্টের রানটাইম সময়ে কোন সমস্যার কারণে হয়। প্রজেক্টে কোন প্রসেস অনাকাঙ্ক্ষিত ভাবে বন্ধ হলে, ঠিক ভাবে ডাটাবেজ কানেক্ট না হলে, বা কোন আন হ্যান্ডেল্ড রিজেকশন হলে এই এরর হয়। এই এররটি সমাধান করার জন্য, কোডটি চেক করে প্রয়োজনীয় পরিবর্তন এবং ঠিক ভাবে এরর হান্ডেল করতে হবে।

Vercel এ কোন এরর ফেস করলে শুরুতেই `Logs` চেক করতে হবে। `Logs` টা যদি আপনি মনোযোগ সহকারে পড়েন তাহলে `Error` সম্পর্কে ধারনা পেয়া যাবেন। `Logs`-এ সাধারণত Error-এর কারণ এবং কোথায় Error ঘটেছে সে সম্পর্কে তথ্য থাকে। 

**Logs-এর কিছু গুরুত্বপূর্ণ অংশ হল:**

- **Error message:** Error message-এ Error-এর সংক্ষিপ্ত বিবরণ থাকে।
- **Stack trace:** Stack trace-এ Error-এর `path` সম্পর্কে তথ্য থাকে, সে পাথে গিয়ে আপনি এরর এর সমাধান করতে পারেন।
- **Environment variables:** Environment variables-এ কোন প্রবলেম হলে এখানে তা দেখানো হয়, আপনি আপনার প্রোজেক্টের `Settings` অধীনে "Environment" ট্যাবটিতে ক্লিক করে Environment variables-গুলি দেখতে এবং সেট করতে পারেন।।

**কিছু নির্দিষ্ট এরর এবং সমাধান:**

- ***`[Error: "Invalid project name"]`** এই এররটি প্রোজেক্টের নামটি সঠিকভাবে সেট না করা হলে হয়। এই এররটি সমাধান করার জন্য, প্রোজেক্টের নামটি সঠিকভাবে সেট করতে হবে।
- ***`[Error: "No build script found"]`** এই এররটি প্রোজেক্টে একটি build script না থাকার কারণে হয়। এই এররটি সমাধান করার জন্য, প্রোজেক্টে একটি build script যোগ করতে হবে।
- ***`[Error: "Missing dependency"]`** এই এররটি প্রোজেক্টে একটি নির্দিষ্ট dependency না থাকার কারণে হয়। এই এররটি সমাধান করার জন্য, প্রোজেক্টে প্রয়োজনীয় dependency যোগ করতে হবে।
- * **`[Vercel Serverless Functions timing out]`** এই এররটি বিভিন্ন কারনে হয়ে থাকে, কোন রিকুয়েস্ট যদি ১০ সেকেন্ডের পরেও রিসল্ভ না হয় তাহলে সাধারনত এই এরর দেয়। তবে আমরা দেখেছি অনেকে মঙ্গডিবিতে `Current IP` সেট করে রাখার জন্য এর প্রবলেম টা হয়, সেক্ষেত্রে `Current IP` ডিলিট করে `allow access from anywhere` সেট করে দিতে হবে।

**vercel.json কিভাবে সেটআপ করবেন?**

vercel এ express এপ্লকেশন run করার জন্য vercel.json ফাইলে কিছু কনফিগারেশন করা লাগে। সেক্ষেত্রে এটাকে টেমপ্লেট হিসাবে ইউজ করতে পারেন।

```json
{
  "version": 2,
  "builds": [
    {
      "src": "index.js", // project এর মেইন ফাইল পাথ, 
										     // আমাদের ক্ষেত্রে সাধারণত `dist/server.js` file
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      // Specify which paths will route to a destination using a regex
      "src": "/(.*)",
      // Specify the paths' destination
      "dest": "index.js" // project এর মেইন ফাইল পাথ, 
										     // আমাদের ক্ষেত্রে সাধারণত `dist/server.js` file
    }
  ]
}
```

**সচারচর করা কিছু ভুলঃ**

- **বিল্ড না করেই ডিপ্লয় করাঃ** এই প্রবলেম টা সাধারণত CLI দিয়ে ডিপ্লয় করার সময় বেশি চখে পরে। প্রজেক্ট বিল্ড না করে ডিপ্লয় করার কারনে প্রজেক্টটি ঠিকভাবে কাজ করেনা বা আপডেট হয় না। তাই প্রতিবার ডিপ্লয় করার পূর্বে বিল্ড করে নিতে হবে।
- **env সেটআপ না করাঃ** cli এর মাধ্যমে প্রজেক্ট ডিপ্লয় করলে সাধারণত env অটোমেটিক ভাবে সেট হয়ে যায়। কিন্তু মাঝে মাঝে সমস্যা দেখা দেয়। তখন আপনাকে প্রজেক্ট সেটিং থেকে ম্যানুয়ালি Environment Variable সেট করে আবার ড়িপ্লয় করতে হবে।
- **Vercel Functions timing out?** ভারসেলে বিভিন্ন কারনে টাইম আউট হতে পারে। অনেক সময় কোন ফাংশন এক্সিকিউট হতে ১০ সেকেন্ডের বেশি সময় নিলে এটা এরর দেয়। তবে আমরা এটা ফ্রিতে ৬০ সেকেন্ড এক্সটেন্ড করতে পারি।
    - **Hobby:** 10s (default) - [configurable](https://vercel.com/docs/functions/configuring-functions/duration) up to 60s
    - **Pro:** 15s (default) - [configurable](https://vercel.com/docs/functions/configuring-functions/duration) up to 300s
    - **Enterprise:** 15s (default) - [configurable](https://vercel.com/docs/functions/configuring-functions/duration) up to 900s
    - https://vercel.com/docs/functions/configuring-functions/duration.
    
    অনেক সময় সব কিছু ঠিক ভাবে করার পরেও ভারসেলে ডিপ্লয় করা প্রজেক্ট কাজ করে না। তখন `.vercel` ফোল্ডার টি ডিলিট করে আবার নতুন ভাবে ডিপ্লয় করতে হবে।
    

**আরও কিছু টিপস:**

- **সমস্যা সমাধানে Vercel documentation পড়ুন বা support center থেকে হেল্প নিতে পারেন।**
- **Vercel community forums এবং Discord server-এ জুক্ত হতে পারেন। এতে ভারসেলের ফিচার সম্পর্কে আপ টু ডেট থাকতে পারবেন।**
- **আপনার প্রোজেক্টগুলি ডেপ্লয় করার আগে, সেগুলি ভালভাবে পরীক্ষা করুন যাতে কোন ত্রুটি না থাকে।**

আশা করি এই ব্লগটি আপনাদের উপকারে আসবে। এখানে আমি কিছু সাধারন সমস্যা নিয়ে আলোচনা করাছি। আপনারা অন্য কোন সমস্যা ফেস করলে কমেন্ট সেকশনে জানাতে পারেন।

**Vercel Alternatives:**

- [Render](https://render.com/)
- [Railway](https://railway.app/)
- [Cyclick.sh](https://www.cyclic.sh/)
- Netlify
- Cloudflare Pages
- Codesphere etc

**Resource:** [Errors | Vercel Docs](https://vercel.com/docs/errors)