আপগ্রেড Laravel 5.7 টু Laravel 7, সমস‌্যা ও সমাধান

আজকে একটা Laravel 5.7 প্রোজেক্টকে Laravel 7 এ আপগ্রেড করতে গিয়ে অদ্ভুত কিছু জিনিসের সম্মুখিন হলাম।

১. এক বারে আপগ্রেড এ Jump করতে গেলে ( Laravel 5.7 to Laravel 7) যেসব Error আসে তা বোঝা কঠিন। যত সার্চ দিছি, সবাই ই বলছিল যে এক এক স্টেপ করে আপডেট দিতে, শর্টকাট মারতে গিয়ে ধরা খেয়ে আবার গোড়া থেকে শুরু করছি এক এক স্টেপ করে (5.7 to 5.8, 5.8 to 6, 6 to 7)।

২. লারাভেল এর ওয়েবসাইটে বলা াই কিভাবে আপগ্রেড করতে হবে। বলা আছে, কি কি জিনিস composer.json এ থাকা লাগবে। কিন্তু সেগুলো থাকার পর কি করতে হবে, সেটা বলা নাই। সেটা অন‌্য জায়গায় খুজে পাইছি, composer update চালাইতে হবে। মজা হচ্ছে আমার এই কমান্ডের চেয়ে composer install চালানো লাগছে বেশি।

৩। Laravel 5.7 থেকে 5.8 এ যেতে তেমন কোন সমস‌্যা হয় না, Laravel ওয়েবসাইটে composer.json এ যেসব থাকতে হবে বলছে, তা থাকলেই চলবে। এরপর সবচেয়ে বেস্ট হল, composer.lock আর vendor ফোল্ডারটা ডিলিট করে composer install চালায় দিলে সব প‌্যাকেজ আবার install হয়ে যাবে।

৪। Laravel 5.8 থেকে Laravel 6 এ যেতে একটা সমস‌্যা আছে, যেটা লারাভেল ওয়েবসাইটে নাই। সেটা হল kylekatarnls/update-helper প‌্যাকেজটা composer.json এ নাই এবং Laravel 5.8 এ ও নাই। এইটা বের করতে আমার বেশ কিছু সময় লেগেছে। যাই হোক, সমাধান হল আগের মতই প্রায়, একটু ডিফারেন্ট ভাবে করছি। সাধারণ নিয়ম হল composer.json এ এই প‌্যাকেজটা add করে composer update কল করলেই হত। কিন্তু আমি ঘরপোড়া গরু। তাই আগের বারের মত vendor ফোল্ডার আর composer.lock ডিলিট করে composer require kylekatarnls/update-helper চালায়ে দিছি। আর সব কিছু এইটার সাথে install হয়ে গেছে।

৫। Laravel 6 থেকে Laravel 7 এ যেতে ২টা সমস‌্যা আছে। composer.json এ required প‌্যাকেজ add করলেও composer update কল করি আর vendor ফোল্ডার আর composer.lock ডিলিট করে composer install চালাই, লাভ হয় না। প্রথম সমস‌্যা হল bootstrap/cache ফোল্ডার এ services.php এ কিছু কোড আছে যা, Laravel 7 কম্পাটিবল না (সম্ভবত Laravel 5.7 আর Laravel 7 এর কোড আলাদা এই ফাইল এর জন‌্য)। সাজেশন দেখলাম যে, এই ফোল্ডার এর সব php ফাইল ডিলিট করে দিতে, তাতে সমস‌্যা নাই, install বা update কল করলে আবার জেনারেট হয়ে যায় এখানকার ফাইলগুলো। দ্বিতীয় সমস‌্যা হল app/Exceptions/Handler.php ফাইলে। এটি Definitely Laravel 5.7 আর Laravel 7 এর জন‌্য আলাদা এবং ইনকম্পাটিবল। এই ফাইলটা ওপেন করে https://github.com/laravel/laravel/blob/master/app/Exceptions/Handler.php এখানে যে কোড আছে, তা হুবহু কপি-পেস্ট করে দিছি। তারপর আগের মত vendor ফোল্ডার আর composer.lock ডিলিট করে composer install চালায় দিছি। ব‌্যস হয়ে গেছে। এরপর একটা ৫মিলিয়ন রো এর ডাটাবেজ কমান্ড লাইনে ইমপোর্ট করছি MySQL ডাটাবেজ এ (এইটা কিছুদিন আগে ৪৩ মিলিয়ন+ ছিল, পরে একটা টেবিল এর সব ডাটা ফেলে দিছি (ট্রাকিং লগ, সো ফেলে দিলে খুব সমস‌্যা হবে না হিসেবে ফেলে দিছি, তারপর মাত্র ১ মাসে আরো ২.৫ মিলিয়ন জমছে)। এখন প্রোজেক্ট Laravel 7 এ চলছে স্মুথভাবে।

** এই সব Experiment করার আগে অবশ‌্যই প্রোডাক্টশন এর চলমান ভার্সনটা ব‌্যাকআপ করে নিবেন। যদি কোন কারণে কোন সমস‌্যা হয়, তবে আগেরটা রিস্টোর করে নিলেই হবে আবার। আর অবশ‌্যই এসব লোকালে ব‌্যাকআপ নিয়ে লোকালে করা বেটার। এই Experiment করতে গিয়ে কেউ যদি ব‌্যাকআপ করতে ভুলে যায় আর মেইন প্রোজেক্টে গ‌্যান্জাম লাগায় তো আমি দায়ী না।

REF: Medium.com

Leave a Reply

Your email address will not be published.