dev
, staging
এবং master ( which is also maybe the main production branch)
এবং তিনটা ব্রাঞ্চ এর জন্য তিনটা ওয়েব ইন্সটলেশন আছে যথাক্রমে dev.application.com
staging.application.com
এবং application.com
এবং গিট হুক ব্যাবহার করে আমরা সহজেই অটো ডিপ্লয়মেন্ট সেট করতে পারি যেন ডেভলপাররা গিট রিপো তে নতুন কোড কমিট করার সাথে সাথেই আমারা corresponding ইন্সটলেশন এ গিয়ে ইফেক্ট দেখে চেক করতে পারি ।QA
টিম ঐ ফিচারটা টেস্ট করা শুরু করে দিতে পারে । এখন কোন ফিচার প্রথমে dev
এ যায়, সেখানে অন্য ডেভলপাররা অথবা QA
টিম চেক করে গ্রিন সিগনাল দিলে, সেই ফিচার ম্যানেজার/বিজনিজ ওনার কে দেখানোর জন্য staging
এ পুশ করা হয়। এবং সবাই ফাইনালি এপ্রুভ করলে production
এ এন্ড ইউজার দের জন্য সেই ফিচারটা ওপেন করা হয়।codebase
তো একটা কিন্তু আমাদের তিন ধরনের কনফিগারেশন দরকার। কারণ dev
, staging
এবং production
এর আলাদা আলাদা ডেটাবেজ থাকবে, dev
এ দেখা গেল আমরা সুবিধার জন্য sqlite
ব্যাবহার করলাম, বাট স্টেজিং এ মাই সিকিউএল লাগবে। প্রোড এ অন্য কোন DBMS
। কিংবা ডেভ এ আমরা ফাইল বেইসড ক্যাশিং ব্যাবহার করলাম কিন্তু সার্ভার এ memcached
অথবা redis
লাগবে। এইসব এক্সটার্নাল সার্ভিস ব্যাবহার করার জন্য আমাদের কোন php
প্যাকেজ বা লাইব্রেরী ব্যাবহার করতে হবে। বেশির ভাগ ক্ষেত্রেই এইসব প্যাকেজ এর কনফিগ ফাইল থাকে যেখানে ভিভিন্ন প্যারামিটার সেট অথবা দরকার মত বদলানো যায়।public/index.php
এর মাধ্যমে প্রসেস হয়। এই প্যাটার্ন Front Controller Pattern
নামে পরিচিত। লারাভেল সহ সব MVC
framework ই এই প্যাটার্ন ফলো করে। আচ্ছা আমরা লারাভেল রিকুয়েস্ট সাইকেল নিয়ে অন্য কোন পোষ্ট এ কথা বলব।bootstrap/start.php
ফাইল এ ইনভায়রনমেন্ট ডিটেকশন হয় যা public/index.php
ফাইল এ autolaoder
এর পরই লোড করা হয়। সো বলা যায় ইনভায়রনমেন্ট ডিটেকশন লারাভেল রিকুয়েস্ট লাইফ সাইকেল এর একদম প্রথম দিকেই ঘটে, কারণ ইনভায়রনমেন্ট এর উপর নির্ভর করে লারাভেল কনফিগ ফাইল লোড করে।local
ইনভায়রনমেন্ট এর জন্য হোস্টনেম homestead
থাকে কারণ যারা homestead
ব্যাবহার করে তাদের যেন কিছু পরিবর্তন করতে না হয়। এইরকম অনেক ক্ষেত্রেই লারাভেল বিভিন্ন কনভেনশন ব্যাবহার করে। এই কাজটার জন্য একটা ডেডিকেটেড টার্ম আছে Convention Over Configuration
যেই কাজটা মেবি রেইলস প্রথমে শুরু করেছিল। এইটার উদ্দেশ্য হল প্রচলিত আলিখিত কিছু নিয়ম ফলো করলে কাজ অনেক সহজ হয়ে যাবে। কাইন্ড অফ দ্যা ফ্রেমওয়ার্ক উইল থিংক এহেড ফর ইয় ইন ম্যানি কেজেস টু ম্যাইক ইউর লাইফ ইজিয়ার।hostname
ব্যাবহার করে। বাট লাইক ম্যানি আদার থিংস, ইউ ক্যান ইউজ ইউর ওন ওয়ে টু।hostname
ব্যাবহার করা। লিনাক্স অথবা ম্যাক এ টার্মিনাল এ hostname
কমান্ড ব্যাবহার করে হোস্টনেম বের করা যায়। আমরা নিচের মত করে আরও ইনভায়রনমেন্ট যোগ করতে পারি।staging
আর prod
যদি একই সার্ভার এ থাকে তাহলে hostname
ব্যাবহার করে তাদের আলাদাভাবে ডিটেক্ট করা সম্ভব না।$app->detectEnvironment()
মেথড এ এরে এর পরিবর্তে পরিবর্তে closure
ব্যাবহার করে আমাদের সুবিধামত ইনভায়রনমেন্ট ডিটেকশন কোড যোগ করতে পারি।genenv()
ফাংশান এর মাধ্যমে LARAVEL_ENV
নামে কোন key
ইনভায়রনমেন্ট ভ্যারিয়েবল এ আছে কিনা এবং যদি পায় তাহলে তার ভ্যালু রিটার্ন করে এবং ঐ ভ্যালূই ইনভায়রনমেন্ট হিসাবে সেট করে। আর যদি ঐ key
Exist না করে তাহলে local
রিটার্ন করে, অর্থাৎ ঐ key
না থাকলে local
ইনভায়রনমেন্ট সেট হয়।vhost
অথবা htaccess
ফাইল এ নিচের মত করে ইনভায়রনমেন্ট ভ্যারিয়েবল সেট করতে পারি।nginx
ব্যাবহার করেন তাহলে আপনাকে php-fpm, or php-cgi
এর মাধ্যমে ইনভায়রনমেন্ট ভ্যারিয়েবল সেট করতে হবে কারণ nginx
, apache
এর মত নিজে php
প্রসেস নিজে ম্যানেজ করেনা ।