1. সংক্ষিপ্ত বিবরণ
এই কোডল্যাব সিরিজের (স্ব-গতিসম্পন্ন, হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হল গুগল অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড) ডেভেলপারদের তাদের অ্যাপগুলিকে আধুনিকীকরণের মাধ্যমে একাধিক মাইগ্রেশনের মাধ্যমে পরিচালনা করতে সাহায্য করা। সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপ হল মূল রানটাইম বান্ডেলড পরিষেবাগুলি থেকে সরে আসা কারণ পরবর্তী প্রজন্মের রানটাইমগুলি আরও নমনীয়, ব্যবহারকারীদের আরও বৈচিত্র্যময় পরিষেবা বিকল্প প্রদান করে। নতুন প্রজন্মের রানটাইমে স্থানান্তর আপনাকে গুগল ক্লাউড পণ্যগুলির সাথে আরও সহজে সংহত করতে, সমর্থিত পরিষেবাগুলির বিস্তৃত পরিসর ব্যবহার করতে এবং বর্তমান ভাষা প্রকাশগুলিকে সমর্থন করতে সক্ষম করে।
এই প্রাথমিক টিউটোরিয়ালটি অ্যাপ ইঞ্জিন অ্যাপগুলিতে ওয়েব ফ্রেমওয়ার্ক আধুনিকীকরণের প্রথম মাইগ্রেশন ধাপগুলি দেখায়: webapp2 থেকে Flask এ স্থানান্তর। আপনার অ্যাপে, আপনি রাউটিং পরিচালনা করে এমন যেকোনো ওয়েব ফ্রেমওয়ার্ক ব্যবহার করতে পারেন, তবে এই টিউটোরিয়ালের জন্য, আমরা Flask ব্যবহার করি কারণ এটি সম্প্রদায় দ্বারা ব্যাপকভাবে ব্যবহৃত হয়।
তুমি শিখবে কিভাবে
- তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করুন (অন্তর্নির্মিত বা অন্যথায়)
- কনফিগারেশন ফাইল আপডেট করুন
-
webapp2থেকে ফ্লাস্কে একটি সহজ অ্যাপ স্থানান্তর করুন
তোমার যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প যার সাথে:
- পাইথনের মৌলিক দক্ষতা
- লিনাক্সের মৌলিক কমান্ড সম্পর্কে জ্ঞান থাকা
- অ্যাপ ইঞ্জিন অ্যাপ তৈরি এবং স্থাপনের প্রাথমিক জ্ঞান।
জরিপ
আপনি এই কোডল্যাবটি কীভাবে ব্যবহার করবেন?
2. পটভূমি
২০০৮ সালে যখন অ্যাপ ইঞ্জিন প্রথম পাইথন ২.৫ তে চালু হয় তখন webapp ফ্রেমওয়ার্কটি একত্রিত করা হয়। কয়েক বছর পরে, ২০১৩ সালে ২.৭ রানটাইম ২.৫ কে অবমূল্যায়ন করা হলে এটি পরবর্তী webapp2 দ্বারা প্রতিস্থাপিত হয়।
যদিও webapp2 ( docs দেখুন) এখনও বিদ্যমান এবং অ্যাপ ইঞ্জিনের বাইরে WSGI-সম্মত ওয়েব ফ্রেমওয়ার্ক হিসেবে ব্যবহার করা যেতে পারে, এটি অ্যাপ্লিকেশনের উপযুক্ত কোডে ব্যবহারকারীর অনুরোধের নিজস্ব রাউটিং করে না। পরিবর্তে, এটি সংশ্লিষ্ট "হ্যান্ডলার"-এ ওয়েব ট্র্যাফিকের রাউটিং সম্পাদনের জন্য অ্যাপ ইঞ্জিন, কনফিগারেশন ফাইল এবং ডেভেলপারের উপর নির্ভর করে। তদুপরি, webapp2 এর মূল সুবিধাগুলি অ্যাপ ইঞ্জিনের বান্ডেলড পরিষেবার সাথে অবিচ্ছেদ্যভাবে আবদ্ধ, যদিও এটি পাইথন 3-তে কাজ করে ( সম্পর্কিত সমস্যাটিও দেখুন) কার্যকরভাবে এটিকে অবমূল্যায়ন করে।
এই মডিউলটি অনুশীলনকারীদের একটি সহজ webapp2 অ্যাপকে ফ্লাস্কে স্থানান্তর করার জন্য ব্যবহারিক অভিজ্ঞতা প্রদান করে, যা অ্যাপ ইঞ্জিন এবং গুগল ক্লাউডের বাইরে আরও অনেক পরিষেবা দ্বারা সমর্থিত একটি ফ্রেমওয়ার্ক, যা অ্যাপগুলিকে আরও পোর্টেবল করে তোলে। যদি ফ্লাস্ক আপনার অ্যাপ্লিকেশনটি স্থানান্তর করার জন্য একটি পছন্দসই ফ্রেমওয়ার্ক না হয়, তবে আপনি অন্য একটি নির্বাচন করতে পারেন যতক্ষণ না এটি নিজস্ব রাউটিং করে। এই কোডল্যাব তথ্য প্রযুক্তি সিদ্ধান্ত গ্রহণকারী (ITDM) এবং ডেভেলপারদের মাইগ্রেশনের ধাপগুলি দেখায়, যাতে আপনি আসলে কোন ফ্রেমওয়ার্কে স্থানান্তরিত হন তা নির্বিশেষে এই প্রক্রিয়াটির সাথে নিজেকে পরিচিত করতে পারেন।
এই মাইগ্রেশনের প্রাথমিক ধাপগুলি হল:
- সেটআপ/প্রিওয়ার্ক
- ফ্লাস্ক থার্ড-পার্টি লাইব্রেরি যোগ করুন
- অ্যাপ্লিকেশন ফাইল আপডেট করুন
- HTML টেমপ্লেট ফাইল আপডেট করুন
৩. সেটআপ/প্রিওয়ার্ক
টিউটোরিয়ালের মূল অংশে যাওয়ার আগে, আসুন আমাদের প্রকল্পটি সেটআপ করি, কোডটি পাই, তারপর (পুনরায়) আপনাকে gcloud কমান্ডের সাথে পরিচিত করি এবং বেসলাইন অ্যাপটি স্থাপন করি যাতে আমরা জানতে পারি যে আমরা কার্যকরী কোড দিয়ে শুরু করেছি।
১. সেটআপ প্রকল্প
একজন বিদ্যমান ডেভেলপার হিসেবে, আপনার অ্যাপ ইঞ্জিন ড্যাশবোর্ড সম্ভবত ইতিমধ্যেই আপনার ব্যবহৃত পরিষেবাগুলি দেখিয়ে দেবে। এই টিউটোরিয়ালের উদ্দেশ্যে, আমরা আপনাকে একটি নতুন প্রকল্প তৈরি করার বা এই টিউটোরিয়ালের জন্য বিদ্যমান একটি পুনরায় ব্যবহার করার পরামর্শ দিচ্ছি। নিশ্চিত করুন যে প্রকল্পটিতে একটি সক্রিয় বিলিং অ্যাকাউন্ট আছে এবং অ্যাপ ইঞ্জিন (অ্যাপ) সক্রিয় আছে।
2. বেসলাইন নমুনা অ্যাপ ডাউনলোড করুন
GAE মাইগ্রেশন রেপোতে আপনার প্রয়োজনীয় সমস্ত কোড রয়েছে। এটি ক্লোন করুন অথবা এর জিপ ফাইল ডাউনলোড করুন। এই টিউটোরিয়ালের জন্য, আপনি মডিউল 0 ফোল্ডার (START) এর কোড দিয়ে শুরু করবেন এবং টিউটোরিয়ালটি সম্পন্ন করার পরে, আপনার কোডটি মডিউল 1 ফোল্ডারের (FINISH) সাথে মিলবে। যদি না হয়, তাহলে পার্থক্যগুলি পরীক্ষা করে দেখুন যাতে আপনি পরবর্তী ল্যাবে যেতে পারেন।
- শুরু: মডিউল 0 কোড
- শেষ: মডিউল ১ কোড
- সম্পূর্ণ রেপো (ক্লোন করতে বা জিপ ডাউনলোড করতে)
মডিউল 0 ফোল্ডারে এমন ফাইল থাকা উচিত যা দেখতে এইরকম, যেমনটি POSIX ls কমান্ডের সাহায্যে দেখানো হয়েছে:
$ ls
app.yaml index.html main.py
৩. (পুনরায়) gcloud কমান্ডের মাধ্যমে নিজেকে পরিচিত করুন
যদি আপনার মেশিনে এখনও gcloud কমান্ড না থাকে, তাহলে Google Cloud SDK ইনস্টল করুন এবং নিশ্চিত করুন যে gcloud আপনার এক্সিকিউশন পাথের অংশ হিসেবে উপলব্ধ এবং নিম্নলিখিত gcloud কমান্ডগুলির সাথে নিজেকে পরিচিত করুন:
-
gcloud components update— Google Cloud SDK আপডেট করুন -
gcloud auth login— আপনার শংসাপত্রযুক্ত অ্যাকাউন্টে লগইন করুন -
gcloud config list— GCP প্রকল্প কনফিগারেশন সেটিংস তালিকাভুক্ত করুন -
gcloud config set project PROJECT_ID— সেট GCP প্রজেক্ট আইডি -
gcloud app deploy— আপনার অ্যাপ ইঞ্জিন অ্যাপ্লিকেশন স্থাপন করুন
যদি আপনি সম্প্রতি gcloud দিয়ে অ্যাপ ইঞ্জিন ডেভেলপমেন্ট না করে থাকেন, তাহলে পরবর্তী ধাপে যাওয়ার আগে সেট আপ করার জন্য আপনার প্রথম চারটি কমান্ড (#1-#4) চালানো উচিত। আসুন এই কমান্ডগুলির একটি সংক্ষিপ্ত সারসংক্ষেপ দেখে নেওয়া যাক।
প্রথমত, gcloud components update নিশ্চিত করে যে আপনার কাছে সর্বশেষ ক্লাউড SDK সংস্করণ রয়েছে। এই কমান্ডটি চালানোর ফলে নিম্নলিখিত আউটপুট পাওয়া উচিত:
$ gcloud components update
Your current Cloud SDK version is: 317.0.0
You will be upgraded to version: 318.0.0
┌──────────────────────────────────────────────────┐
│ These components will be updated. │
├──────────────────────────┬────────────┬──────────┤
│ Name │ Version │ Size │
├──────────────────────────┼────────────┼──────────┤
│ Cloud SDK Core Libraries │ 2020.11.06 │ 15.5 MiB │
│ gcloud cli dependencies │ 2020.11.06 │ 10.6 MiB │
└──────────────────────────┴────────────┴──────────┘
The following release notes are new in this upgrade.
Please read carefully for information about new features, breaking changes,
and bugs fixed. The latest full release notes can be viewed at:
https://cloud.google.com/sdk/release_notes
318.0.0 (2020-11-10)
. . .
(release notes)
. . .
Subscribe to these release notes at
https://groups.google.com/forum/#!forum/google-cloud-sdk-announce.
Do you want to continue (Y/n)?
╔════════════════════════════════════════════════════════════╗
╠═ Creating update staging area ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Uninstalling: Cloud SDK Core Libraries ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Uninstalling: gcloud cli dependencies ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: Cloud SDK Core Libraries ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Installing: gcloud cli dependencies ═╣
╠════════════════════════════════════════════════════════════╣
╠═ Creating backup and activating new installation ═╣
╚════════════════════════════════════════════════════════════╝
Performing post processing steps...done.
Update done!
To revert your SDK to the previously installed version, you may run:
$ gcloud components update --version 317.0.0
এরপর, gcloud auth login ব্যবহার করে আপনি gcloud কমান্ডগুলি ইস্যু করবেন তার জন্য নিজেকে প্রমাণীকরণ করুন:
$ gcloud auth login
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id= . . .
You are now logged in as [YOUR_EMAIL].
Your current project is [PROJECT_ID]. You can change this setting by running:
$ gcloud config set project PROJECT_ID
আপনার বর্তমান প্রকল্প সেটিংস কী তা দেখতে gcloud config list ব্যবহার করুন:
$ gcloud config list [core] account = YOUR_EMAIL disable_usage_reporting = False project = PROJECT_ID Your active configuration is: [default]
উপরের কমান্ডটি আপনাকে নতুন প্রকল্প তৈরি করতে অথবা বিদ্যমান প্রকল্প নির্বাচন করতে সাহায্য করবে। যদি gcloud config list এর আউটপুট এই টিউটোরিয়ালের জন্য আপনি যে নির্বাচিত প্রকল্পটি ব্যবহার করতে চান তার সাথে মেলে না, তাহলে প্রকল্প আইডি সেট করতে gcloud config set project PROJECT_ID চালান। তারপর, আবার gcloud config list চালিয়ে নিশ্চিত করুন যে সঠিক প্রকল্প আইডি সেট করা আছে।
$ gcloud config set project PROJECT_ID Updated property [core/project].
আপনি যদি ক্লাউড কনসোল ব্যবহার করতে পছন্দ করেন, তাহলে আপনি চাইলে নতুন প্রকল্প তৈরি করতে ইউজার ইন্টারফেস অনুসরণ করতে পারেন অথবা আপনার ইতিমধ্যেই থাকা কোনও প্রকল্প ব্যবহার করতে পারেন। আপনার প্রকল্পের ড্যাশবোর্ডে, আপনি প্রকল্পের তথ্য কার্ডটি দেখতে পাবেন যা এর আইডি (প্রকল্পের নাম এবং নম্বর সহ) দেখায়:

শেষ কমান্ড (#৫), gcloud app deploy , অ্যাপ ইঞ্জিনে আপনার অ্যাপ স্থাপনের জন্য। যেহেতু আমরা সবেমাত্র শুরু করছি, এখন এটি চালানো ঐচ্ছিক, তবে এটি কাজ করে তা নিশ্চিত করার জন্য আমরা অবশ্যই মডিউল 0 কোড স্থাপন করতে নিরুৎসাহিত করছি না। কার্যকর করার পরে, আপনি যে ভৌগোলিক অঞ্চলে অ্যাপটি চালাতে চান তা নির্বাচন করুন (সাধারণত আপনি যেখানে অবস্থিত)। তবে একবার সেট করার পরে এটি পরিবর্তন করা যাবে না। তারপর বাকি স্থাপনার তথ্য দেখুন। এটি সম্পন্ন হলে, আপনার অ্যাপটি কোন URL এ পরিবেশিত হবে তা আপনাকে জানানো হবে। আপনি যা দেখতে পাবেন তার একটি সংক্ষিপ্ত সংস্করণ এখানে দেওয়া হল:
$ gcloud app deploy Services to deploy: descriptor: [/private/tmp/mod0-baseline/app.yaml] source: [/private/tmp/mod0-baseline] target project: [PROJECT_ID] target service: [default] target version: [20201116t220827] target url: [https://PROJECT_ID.REG_ABBR.r.appspot.com] Do you want to continue (Y/n)? Beginning deployment of service [default]... ╔════════════════════════════════════════════════════════════╗ ╠═ Uploading 1 file to Google Cloud Storage ═╣ ╚════════════════════════════════════════════════════════════╝ File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REG_ABBR.r.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse
যদি আপনি অনেকদিন ধরে অ্যাপ ইঞ্জিন ব্যবহার না করে থাকেন, তাহলে আপনি লক্ষ্য করতে পারেন যে মূল ডিপ্লয়মেন্ট appcfg.py update কমান্ডটি gcloud app deploy দ্বারা প্রতিস্থাপিত হয়েছে। gcloud app deploy সম্পর্কে আরও জানতে, এর ডকুমেন্টেশন পৃষ্ঠাটি দেখুন।
আরেকটি সাম্প্রতিক পরিবর্তন হল ডিপ্লয় করা অ্যাপের URL, যা http://PROJECT_ID.appspot.com থেকে http://PROJECT_ID.REG_ABBR.r.appspot.com এ পরিবর্তন করা হয়েছে। বেশিরভাগ অ্যাপই অবশেষে নতুন ফর্ম্যাটে রূপান্তরিত হবে। URL ফর্ম্যাট সম্পর্কে আরও তথ্য অনুরোধ এবং রাউটিং ডকুমেন্টেশনে পাওয়া যাবে।
অ্যাপটি স্থাপনের পরে, সর্বশেষ ভিজিটগুলি দেখতে ব্রাউজারটি (সম্ভবত কয়েকবার) রিফ্রেশ করুন:

যদি আপনার অ্যাপটি নতুন হয়, তাহলে আপনি কেবল এক বা কয়েকটি ভিজিট দেখতে পাবেন।
৪. ফ্লাস্ক থার্ড-পার্টি লাইব্রেরি যোগ করুন
পাইথন ২ অ্যাপ ইঞ্জিন রানটাইম "বিল্ট-ইন" থার্ড-পার্টি লাইব্রেরির একটি সেট প্রদান করে যেখানে আপনাকে কেবল আপনার app.yaml ফাইলে সেগুলি নির্দিষ্ট করতে হবে। যদিও এই মাইগ্রেশনের জন্য তাদের ব্যবহারের প্রয়োজন নেই, তবে পরবর্তী মাইগ্রেশন টিউটোরিয়ালে (মডিউল ২ এর জন্য) এগুলি থাকবে।
যে থার্ড-পার্টি লাইব্রেরিগুলি বিল্ট-ইন নয় সেগুলিকে requirements.txt নামক একটি ফাইলে নির্দিষ্ট করতে হবে এবং অ্যাপ্লিকেশন কোডের মতো একই ডিরেক্টরিতে lib ফোল্ডারে স্থানীয়ভাবে ইনস্টল করতে হবে যেখানে সবকিছু অ্যাপ ইঞ্জিনে আপলোড করা হয়। থার্ড-পার্টি লাইব্রেরি বান্ডেল করার ডকুমেন্টেশনে আরও তথ্য রয়েছে।
Flask এর মতো কপি করা লাইব্রেরিগুলির জন্য আপনাকে App Engine কে appengine_config.py কনফিগারেশন ফাইল ব্যবহার করে lib ফোল্ডারে সেগুলি খুঁজে বের করতে বলতে হবে। appengine_config.py কনফিগারেশন ফাইলটি requirements.txt এবং lib এর মতো একই শীর্ষ-স্তরের অ্যাপ্লিকেশন ফোল্ডারে রাখা হয়েছে। টিউটোরিয়ালের এই অংশে, আপনি যা করবেন:
-
requirements.txtতৈরি করুন (কপি করা [অ-বিল্ট-ইন] তৃতীয় পক্ষের লাইব্রেরি উল্লেখ করুন) -
appengine_config.pyতৈরি করুন (তৃতীয় পক্ষের লাইব্রেরিগুলি চিনুন) - (তৃতীয় পক্ষের) প্যাকেজ এবং নির্ভরতা ইনস্টল করুন
১. requirements.txt তৈরি করুন
আপনার প্যাকেজগুলি নির্দিষ্ট করার জন্য একটি requirements.txt ফাইল তৈরি করুন। আমাদের ক্ষেত্রে, Flask হল তৃতীয় পক্ষের লাইব্রেরি যা প্রয়োজন। এই লেখার সময়, সর্বশেষ সংস্করণটি 1.1.2, তাই এই একটি লাইন দিয়ে requirements.txt তৈরি করুন:
Flask==1.1.2
গৃহীত ফর্ম্যাট সম্পর্কে আরও জানতে requirements.txt ডকুমেন্টেশনটি দেখুন।
2. appengine_config.py তৈরি করুন
পরবর্তী ধাপ হল অ্যাপ ইঞ্জিনকে বহিরাগত তৃতীয় পক্ষের লাইব্রেরিগুলি সনাক্ত করতে সাহায্য করা। নিম্নলিখিত বিষয়বস্তু সহ appengine_config.py নামে একটি ফাইল তৈরি করুন:
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
এই কোডটি ঠিক তাই করে যা আমরা আগে উল্লেখ করেছি, অর্থাৎ, কপি করা লাইব্রেরির জন্য অ্যাপ ইঞ্জিনকে lib ফোল্ডারে নির্দেশ করুন।
৩. প্যাকেজ(গুলি) এবং নির্ভরতা ইনস্টল করুন
এখন lib ফোল্ডার তৈরি করতে pip install কমান্ডটি চালান এবং সেখানে Flask এবং এর নির্ভরতা ইনস্টল করুন:
$ pip install -t lib -r requirements.txt
আপনি pip অথবা pip2 ব্যবহার করুন না কেন, প্যাকেজ ইনস্টলেশন সম্পন্ন হওয়ার পরে, আপনার একটি lib ফোল্ডার থাকা উচিত যার বিষয়বস্তু এই ধরণের হবে:
$ ls lib bin/ click/ click-7.1.2.dist-info/ flask/ Flask-1.1.2.dist-info/ itsdangerous/ itsdangerous-1.1.0.dist-info/ jinja2/ Jinja2-2.11.2.dist-info/ markupsafe/ MarkupSafe-1.1.1.dist-info/ werkzeug/ Werkzeug-1.0.1.dist-info/
৫. অ্যাপ্লিকেশন ফাইল আপডেট করুন
এবার অ্যাপ্লিকেশন ফাইল, main.py আপডেট করা যাক।
১. আমদানি
সকল পাইথন ফাইলের মতোই আমদানি প্রথমে আসে। webapp2 ফ্রেমওয়ার্ক আমদানির পরে ndb Datastore লাইব্রেরি আসে এবং অবশেষে, App Engine এক্সটেনশন যা Django-স্বাদযুক্ত টেমপ্লেটগুলি প্রক্রিয়া করে। আপনি নিম্নলিখিতটি দেখতে পাবেন:
- আগে:
import webapp2
from google.appengine.ext import ndb
from google.appengine.ext.webapp import template
Flask-এ স্থানান্তর করার সময়, আপনাকে Flask এবং টেমপ্লেট রেন্ডারার উভয় অংশ একই সাথে আমদানি করতে হবে। webapp2 সম্পর্কিত আমদানির জোড়া মুছে ফেলুন এবং নিম্নলিখিতভাবে প্রতিস্থাপন করুন ( ndb আমদানি যেমন আছে তেমনই ছেড়ে দিন):
- পরে:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
2. স্টার্টআপ
webapp2 ব্যবহারকারী অ্যাপগুলির জন্য একটি একক অ্যারে (পাইথন তালিকা) প্রয়োজন যা যেকোনো পাইথন ফাইলের সমস্ত রুট এবং হ্যান্ডলার তালিকাভুক্ত করে (অন্যান্যও থাকতে পারে):
- আগে:
app = webapp2.WSGIApplication([
('/', MainHandler),
], debug=True)
মনে রাখবেন যে app.yaml উচ্চ-স্তরের রাউটিং সম্পাদন করে এবং বিভিন্ন হ্যান্ডলার কল করতে পারে। নমুনা অ্যাপটি যথেষ্ট সহজ যে সমস্ত রুট main.py হ্যান্ডলারে আসে।
Flask এইভাবে রাউটিং টেবিল ব্যবহার করে না, তাই main.py থেকে এই লাইনগুলি মুছে ফেলুন । Flask-এর জন্যও initialization প্রয়োজন, তাই main.py এর উপরে আমদানির ঠিক নীচে নিম্নলিখিত লাইনটি যোগ করুন:
- পরে:
app = Flask(__name__)
ফ্লাস্কে, আপনি ফ্রেমওয়ার্কটি ইনিশিয়ালাইজ করেন এবং তারপর রুটগুলি সংজ্ঞায়িত করার জন্য ডেকোরেটর ব্যবহার করেন। এছাড়াও, রুটগুলি ফাংশনের সাথে যুক্ত করা হয়, ক্লাস বা পদ্ধতি নয়।
এই কোডল্যাবে ফ্লাস্ক টিউটোরিয়াল অন্তর্ভুক্ত করা সম্ভব নয়, তাই ফ্লাস্ক টিউটোরিয়ালটি নিয়ে কিছু সময় ব্যয় করুন এবং ফ্রেমওয়ার্কটি আরও স্বাচ্ছন্দ্য বোধ করার জন্য ফ্লাস্ক ডকুমেন্টেশন পর্যালোচনা করুন।
3. ডেটা মডেল
এখানে কোনও পরিবর্তন নেই। পরবর্তী কোডল্যাবের কেন্দ্রবিন্দুতে থাকবে ডেটাস্টোর।
৪. হ্যান্ডলার
আপনি যে ফ্রেমওয়ার্কই ব্যবহার করুন না কেন ( webapp2 অথবা Flask), অ্যাপ্লিকেশনটি 3টি কাজ করে:
- রুট পাথ (
/) হ্যান্ডেল করুন অনুরোধগুলি পান - একটি ওয়েব পৃষ্ঠা "visit" নিবন্ধন করুন (
Visitঅবজেক্ট তৈরি/সংরক্ষণ করুন) - সাম্প্রতিক ১০টি পরিদর্শনের তালিকা প্রদর্শন করুন (পূর্বনির্ধারিত টেমপ্লেট সহ,
index.html)
webapp2 ফ্রেমওয়ার্ক একটি ক্লাস-ভিত্তিক এক্সিকিউশন মডেল ব্যবহার করে যেখানে প্রতিটি সমর্থিত HTTP পদ্ধতির জন্য হ্যান্ডলার তৈরি করা হয়। আমাদের সহজ ক্ষেত্রে, আমাদের কেবল GET আছে, তাই একটি get() পদ্ধতি সংজ্ঞায়িত করা হয়েছে:
- আগে:
class MainHandler(webapp2.RequestHandler):
def get(self):
store_visit(self.request.remote_addr, self.request.user_agent)
visits = fetch_visits(10) or () # empty sequence if None
tmpl = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(tmpl, {'visits': visits}))
উপরে উল্লিখিত হিসাবে, Flask নিজস্ব রাউটিং করে। হ্যান্ডলার ক্লাসের পরিবর্তে, আপনি ফাংশনগুলি লেখেন এবং সেগুলিকে সেই রুট দিয়ে সাজান যা তাদের জন্য কল করা উচিত। ব্যবহারকারীরা ডেকোরেটর কলে পরিচালিত HTTP পদ্ধতিগুলি নির্দিষ্ট করতে পারেন, অর্থাৎ, @app.route('/app/', methods=['GET', 'POST']) । যেহেতু ডিফল্ট শুধুমাত্র GET (এবং অন্তর্নিহিতভাবে HEAD ), তাই এটি বন্ধ করা যেতে পারে।
Flask-এ মাইগ্রেট করার সময়, MainHandler ক্লাস এবং এর get() পদ্ধতিটি নিম্নলিখিত Flask রাউটিং ফাংশন দিয়ে প্রতিস্থাপন করুন:
- পরে:
@app.route('/')
def root():
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10) or () # empty sequence if None
return render_template('index.html', visits=visits)
অবশ্যই এটি আপনার অ্যাপের প্রতিনিধিত্ব করে না যা অবশ্যই এই নমুনার চেয়ে জটিল হবে। এই টিউটোরিয়ালগুলির একটি প্রাথমিক লক্ষ্য হল আপনাকে শুরু করতে সাহায্য করা, সেই "পেশী স্মৃতি" তৈরি করা এবং অ্যাপ ইঞ্জিন-নির্দিষ্ট কোডে কোথায় পরিবর্তন করতে হবে তা বুঝতে সাহায্য করা। আপনি এই পরিবর্তনটি সঠিকভাবে করেছেন তা নিশ্চিত করতে, আপনারটি মডিউল 1 main.py এর সাথে তুলনা করুন।
৫. সহায়ক ফাইল
.gcloudignore ফাইলে কোনও পরিবর্তন করা হয়নি। এর উদ্দেশ্য হল এমন ফাইলগুলি নির্দিষ্ট করা যা অ্যাপ ইঞ্জিনে স্থাপন করা যাবে না যা অ্যাপ্লিকেশন স্থাপন এবং কার্যকর করার জন্য অপ্রয়োজনীয়, যার মধ্যে সহায়ক পাইথন, সোর্স কন্ট্রোল, রেপো বয়লারপ্লেট এবং অন্যান্য ফাইল অন্তর্ভুক্ত কিন্তু সীমাবদ্ধ নয়। আমাদের .gcloudignore দেখতে এরকম (সংক্ষিপ্ততার জন্য মন্তব্যগুলি সরানো হয়েছে):
.gcloudignore
.git
.gitignore
.hgignore
.hg/
*.pyc
*.pyo
__pycache__/
/setup.cfg
README.md
৬. HTML টেমপ্লেট ফাইল আপডেট করুন
১. টেমপ্লেট ফাইল সরান
বেসলাইন রেপো ফোল্ডারে (মডিউল 0), index.html টেমপ্লেট ফাইলটি অ্যাপ্লিকেশন ফাইলগুলির মতো একই ফোল্ডারে থাকে। যেহেতু Flask-এর জন্য HTML ফাইলগুলিকে একটি templates ফোল্ডারে রাখা প্রয়োজন, তাই আপনাকে সেই ফোল্ডারটি ( mkdir templates ) তৈরি করতে হবে এবং সেখানে index.html স্থানান্তর করতে হবে। Linux বা Mac OS X-এর মতো POSIX-সম্মত সিস্টেমে, কমান্ডগুলি হবে:
mkdir templates
mv index.html templates
2. টেমপ্লেট ফাইল আপডেট করুন
একবার আপনি index.html templates এ স্থানান্তর করলে, এখন একটি ছোট কিন্তু প্রয়োজনীয় সম্পাদনা করার সময়। আসুন মূল টেমপ্লেট ফাইলটি সম্পূর্ণরূপে দেখে নেওয়া যাক:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
</body>
</html>
যেখানে webapp2 Django টেমপ্লেট ব্যবহার করে যা visit.timestamp.ctime এর মতো কলেবলগুলিকে বন্ধনী ( ) ছাড়াই কার্যকর করে, Jinja2 স্পষ্টভাবে সেগুলি প্রয়োজন। যদিও এটি একটি ছোটখাটো পরিবর্তন বলে মনে হচ্ছে, Jinja টেমপ্লেটগুলি বাক্সের বাইরে আরও শক্তিশালী কারণ আপনি কলগুলিতে আর্গুমেন্ট পাস করতে পারেন।
জ্যাঙ্গোতে, আপনাকে হয় একটি "টেমপ্লেট ট্যাগ" তৈরি করতে হবে অথবা একটি ফিল্টার লিখতে হবে। এই বোধগম্যতা অনুসারে, visit.timestamp.ctime কলে একজোড়া বন্ধনী যোগ করে index.html আপডেট করুন:
- আগে:
<li>{{ visit.timestamp.ctime }} from {{ visit.visitor }}</li>
- পরে:
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
এটিই একমাত্র পরিবর্তন যা প্রয়োজন; বাকি সমস্ত মাইগ্রেশন কোডল্যাবের জন্য index.html এ কোনও অতিরিক্ত পরিবর্তনের প্রয়োজন নেই।
৭. সারাংশ/পরিষ্কারকরণ
অ্যাপ্লিকেশন স্থাপন করুন
এই টিউটোরিয়ালের সকল পরিবর্তন সম্পন্ন করার পর, আপনার অ্যাপ্লিকেশন ফোল্ডারের ফাইলগুলি মডিউল ১ রেপো ফোল্ডারের ফাইলের সাথে অভিন্ন (অথবা প্রায়) হওয়া উচিত। এখন স্থাপন করুন এবং দেখুন যে আপনার মডিউল ১ ফ্লাস্ক অ্যাপ্লিকেশনটি মডিউল ০ webapp2 সংস্করণের সাথে অভিন্নভাবে চলছে।
মূল মডিউল 0 কোড স্থাপনের সময় আমরা আগের মতোই gcloud app deploy কমান্ডটি ব্যবহার করি। PROJECT_ID.appspot.com এ অ্যাপটি অ্যাক্সেস করা, ওয়েব ব্রাউজার থেকে হোক বা curl অথবা wget কমান্ড থেকে হোক, এটি প্রত্যাশা অনুযায়ী কাজ করে তা নিশ্চিত করার জন্য।
যদি আপনি কোনও ধরণের সার্ভার ত্রুটি পান, তাহলে এর অর্থ সাধারণত আপনার পাইথন কোডে কোনও ধরণের টাইপো। তদন্তের জন্য আপনার অ্যাপ্লিকেশন লগগুলি একবার দেখুন। এছাড়াও মডিউল 1 রেপোতে থাকা ফাইলগুলির সাথে আপনার ফাইলগুলির তুলনা করুন (উপরের লিঙ্কটি)।
ঐচ্ছিক: পরিষ্কার করুন
পরবর্তী মাইগ্রেশন কোডল্যাবে যাওয়ার জন্য প্রস্তুত না হওয়া পর্যন্ত বিল এড়াতে পরিষ্কার করার কথা কী? বিদ্যমান ডেভেলপার হিসেবে, আপনি সম্ভবত অ্যাপ ইঞ্জিনের মূল্য নির্ধারণের তথ্য সম্পর্কে ইতিমধ্যেই আপ-টু-স্পিড।
ঐচ্ছিক: অ্যাপটি অক্ষম করুন
যদি আপনি এখনও পরবর্তী টিউটোরিয়ালে যেতে প্রস্তুত না হন, তাহলে চার্জ এড়াতে আপনার অ্যাপটি অক্ষম করুন । যখন আপনি পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হবেন, তখন আপনি এটি পুনরায় সক্ষম করতে পারবেন। আপনার অ্যাপটি অক্ষম থাকা অবস্থায়, চার্জ বহন করার জন্য কোনও ট্র্যাফিক পাবে না, তবে আরেকটি জিনিস যা আপনার ডেটাস্টোরের ব্যবহার বিনামূল্যের কোটা অতিক্রম করলে তার জন্য আপনাকে বিল করা হতে পারে, তাই সেই সীমার মধ্যে পড়ার জন্য যথেষ্ট মুছে ফেলুন।
অন্যদিকে, যদি আপনি মাইগ্রেশন চালিয়ে যেতে না চান এবং সবকিছু সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে আপনি আপনার প্রকল্পটি বন্ধ করে দিতে পারেন।
পরবর্তী পদক্ষেপ
দুটি মাইগ্রেশন মডিউল আছে যা সম্পূর্ণ মডিউল ১ কোড দিয়ে শুরু হয়, মডিউল ২ এবং ৭:
- মডিউল ২ (ডেটাস্টোর ব্যবহার করলে প্রয়োজনীয়)
- অ্যাপ ইঞ্জিন
ndbথেকে ক্লাউড NDB-তে মাইগ্রেট করুন - ক্লাউড এনডিবিতে স্যুইচ করার পর, আরও অনেক বিকল্প উপলব্ধ হয়ে যায়
- ক্লাউড রানে চালানোর জন্য আপনার অ্যাপটিকে কন্টেইনারাইজ করা হচ্ছে
- আপনার অ্যাপটিকে ক্লাউড ডেটাস্টোর ক্লায়েন্ট লাইব্রেরিতে আরও স্থানান্তরিত করা
- Firebase বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য আপনার অ্যাপটিকে ক্লাউড ফায়ারস্টোরে স্থানান্তরিত করা হচ্ছে
- অ্যাপ ইঞ্জিন
- মডিউল ৭ (যদি আপনি [push] টাস্ক কিউ ব্যবহার করেন তবে প্রয়োজনীয়)
- অ্যাপ ইঞ্জিন (পুশ)
taskqueueব্যবহার যোগ করুন - মডিউল ৮-এ ক্লাউড টাস্কে মাইগ্রেশনের জন্য মডিউল ১ অ্যাপ প্রস্তুত করে
- অ্যাপ ইঞ্জিন (পুশ)
৮. অতিরিক্ত সম্পদ
অ্যাপ ইঞ্জিন মাইগ্রেশন মডিউল কোডল্যাব সমস্যা/প্রতিক্রিয়া
এই কোডল্যাবে যদি কোনও সমস্যা খুঁজে পান, তাহলে ফাইল করার আগে অনুগ্রহ করে প্রথমে আপনার সমস্যাটি অনুসন্ধান করুন। নতুন সমস্যা অনুসন্ধান এবং তৈরি করার লিঙ্ক:
মাইগ্রেশন রিসোর্স
মডিউল 0 (START) এবং মডিউল 1 (FINISH) এর জন্য রেপো ফোল্ডারগুলির লিঙ্কগুলি নীচের টেবিলে পাওয়া যাবে। সমস্ত অ্যাপ ইঞ্জিন মাইগ্রেশনের জন্য রেপো থেকেও এগুলি অ্যাক্সেস করা যেতে পারে যা আপনি ক্লোন করতে পারেন বা একটি ZIP ফাইল ডাউনলোড করতে পারেন।
কোডল্যাব | পাইথন ২ | পাইথন ৩ |
মডিউল ০ | (না) | |
মডিউল ১ | (না) |
অ্যাপ ইঞ্জিন রিসোর্স
এই নির্দিষ্ট স্থানান্তর সম্পর্কিত অতিরিক্ত সম্পদ নীচে দেওয়া হল:
- পাইথন মাইক্রো ওয়েব ফ্রেমওয়ার্ক
- (পুরাতন) পাইথন ২.৫ থেকে ২.৭ এবং
webappথেকেwebapp2তে স্থানান্তরিত হচ্ছে - পাইথন 3 এবং GAE পরবর্তী প্রজন্মের রানটাইমে স্থানান্তরিত হচ্ছে
- সাধারণ