1. ওভারভিউ
কোডল্যাবগুলির এই সিরিজের (স্ব-গতিসম্পন্ন, হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হল Google অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড এনভায়রনমেন্ট) ডেভেলপারদের তাদের অ্যাপ্লিকেশানগুলিকে একাধিক মাইগ্রেশনের মাধ্যমে গাইড করে তাদের আধুনিকীকরণে সহায়তা করা৷ সবচেয়ে তাৎপর্যপূর্ণ পদক্ষেপ হল মূল রানটাইম বান্ডিল করা পরিষেবাগুলি থেকে দূরে সরে যাওয়া কারণ পরবর্তী প্রজন্মের রানটাইমগুলি আরও নমনীয়, ব্যবহারকারীদের পরিষেবার বিকল্পগুলির একটি বৃহত্তর বৈচিত্র্য দেয়৷ নতুন প্রজন্মের রানটাইমে চলে যাওয়া আপনাকে Google ক্লাউড পণ্যগুলির সাথে আরও সহজে একীভূত করতে, সমর্থিত পরিষেবাগুলির বিস্তৃত পরিসর ব্যবহার করতে এবং বর্তমান ভাষার প্রকাশগুলিকে সমর্থন করতে সক্ষম করে৷
এই ঐচ্ছিক টিউটোরিয়ালটি ডেভেলপারদের দেখায় কিভাবে ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে ক্লায়েন্ট লাইব্রেরি হিসাবে ডেটাস্টোর পরিষেবার সাথে কথা বলার জন্য স্থানান্তর করতে হয়। যে বিকাশকারীরা NDB পছন্দ করেন তারা এটির সাথে থাকতে পারেন কারণ এটি পাইথন 3 সামঞ্জস্যপূর্ণ, তাই এই স্থানান্তর ঐচ্ছিক। এই মাইগ্রেশন শুধুমাত্র তাদের জন্য যারা ইতিমধ্যেই ক্লাউড ডেটাস্টোর ব্যবহার করে অন্যান্য অ্যাপের সাথে একটি সামঞ্জস্যপূর্ণ কোডবেস এবং শেয়ার করা লাইব্রেরি তৈরি করতে চান। এটি "ব্যাকগ্রাউন্ড" বিভাগে ব্যাখ্যা করা হয়েছে।
আপনি কিভাবে শিখবেন
- ক্লাউড এনডিবি ব্যবহার করুন (যদি আপনি এটির সাথে অপরিচিত হন)
- ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে স্থানান্তর করুন
- আরও আপনার অ্যাপকে Python 3-এ স্থানান্তর করুন
আপনি কি প্রয়োজন হবে
- একটি সক্রিয় GCP বিলিং অ্যাকাউন্ট সহ একটি Google ক্লাউড প্ল্যাটফর্ম প্রকল্প৷
- মৌলিক পাইথন দক্ষতা
- মৌলিক লিনাক্স কমান্ডের কাজের জ্ঞান
- অ্যাপ ইঞ্জিন অ্যাপ্লিকেশানগুলি বিকাশ এবং স্থাপন করার প্রাথমিক জ্ঞান
- একটি কার্যকরী মডিউল 2 অ্যাপ ইঞ্জিন 2.x বা 3.x অ্যাপ।
সমীক্ষা
আপনি কিভাবে এই কোডল্যাব ব্যবহার করবেন?
2. পটভূমি
যদিও ক্লাউড এনডিবি দীর্ঘ সময়ের অ্যাপ ইঞ্জিন বিকাশকারীদের জন্য একটি দুর্দান্ত ডেটাস্টোর সমাধান এবং পাইথন 3-তে রূপান্তরিত করতে সহায়তা করে, এটি অ্যাপ ইঞ্জিন বিকাশকারীরা ডেটাস্টোর অ্যাক্সেস করতে পারে এমন একমাত্র উপায় নয়। যখন অ্যাপ ইঞ্জিনের ডেটাস্টোর 2013 সালে তার নিজস্ব পণ্য হয়ে ওঠে , তখন Google ক্লাউড ডেটাস্টোর , একটি নতুন ক্লায়েন্ট লাইব্রেরি তৈরি করা হয়েছিল যাতে সমস্ত ব্যবহারকারী ডেটাস্টোর ব্যবহার করতে পারে।
Python 3 অ্যাপ ইঞ্জিন এবং নন -অ্যাপ ইঞ্জিন ডেভেলপারদের ক্লাউড ডেটাস্টোর (ক্লাউড এনডিবি নয়) ব্যবহার করার জন্য নির্দেশ দেওয়া হয়েছে। পাইথন 2 অ্যাপ ইঞ্জিন ডেভেলপারদের ndb
থেকে ক্লাউড NDB এবং পোর্ট থেকে Python 3-এ স্থানান্তরিত করতে উৎসাহিত করা হয় তবে তারা ক্লাউড ডেটাস্টোরে আরও স্থানান্তরিত করতেও বেছে নিতে পারে। এটি একটি যৌক্তিক সিদ্ধান্ত বিশেষ করে ডেভেলপারদের জন্য যাদের ইতিমধ্যেই ক্লাউড ডেটাস্টোর ব্যবহার করে কোড রয়েছে, যেমন এইমাত্র উল্লেখ করা হয়েছে এবং তাদের সমস্ত অ্যাপ্লিকেশন জুড়ে শেয়ার করা লাইব্রেরি তৈরি করতে চান৷ কোড পুনঃব্যবহার হল একটি সর্বোত্তম অভ্যাস যেমন কোড সামঞ্জস্য, এবং উভয়ই সামগ্রিক রক্ষণাবেক্ষণ খরচ কমাতে অবদান রাখে, যেমনটি এখানে সংক্ষিপ্ত করা হয়েছে:
ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে স্থানান্তর
- ডেভেলপারদের ডেটাস্টোর অ্যাক্সেসের জন্য একটি একক কোডবেসে ফোকাস করার অনুমতি দেয়
- ক্লাউড এনডিবি ব্যবহার করে কিছু কোড বজায় রাখা এড়িয়ে যায় এবং অন্যগুলি ক্লাউড ডেটাস্টোর ব্যবহার করে
- কোডবেসে আরও ধারাবাহিকতা এবং আরও ভাল কোড পুনঃব্যবহারযোগ্যতা প্রদান করে
- সাধারণ/ভাগ করা লাইব্রেরিগুলির ব্যবহার সক্ষম করে, যা সামগ্রিক রক্ষণাবেক্ষণ খরচ কমাতে অবদান রাখে
এই মাইগ্রেশনে এই প্রাথমিক ধাপগুলি রয়েছে:
- সেটআপ/প্রিওয়ার্ক
- ক্লাউড ডেটাস্টোর ক্লায়েন্ট লাইব্রেরি দিয়ে ক্লাউড এনডিবি প্রতিস্থাপন করুন
- অ্যাপ্লিকেশন আপডেট করুন
3. সেটআপ/প্রিওয়ার্ক
আমরা টিউটোরিয়ালের মূল অংশ নিয়ে যাওয়ার আগে, আসুন আমাদের প্রকল্প সেট আপ করি, কোড পাই, তারপর বেসলাইন অ্যাপটি স্থাপন করি যাতে আমরা জানি যে আমরা কাজের কোড দিয়ে শুরু করেছি।
1. সেটআপ প্রকল্প
আপনি যদি মডিউল 2 কোডল্যাব সম্পূর্ণ করেন, আমরা সেই একই প্রকল্প (এবং কোড) পুনরায় ব্যবহার করার পরামর্শ দিই। বিকল্পভাবে, আপনি একটি একেবারে নতুন প্রকল্প তৈরি করতে পারেন বা অন্য একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করতে পারেন। নিশ্চিত করুন যে প্রকল্পটির একটি সক্রিয় বিলিং অ্যাকাউন্ট আছে এবং অ্যাপ ইঞ্জিন (অ্যাপ) সক্ষম আছে।
2. বেসলাইন নমুনা অ্যাপ পান
পূর্বশর্তগুলির মধ্যে একটি হল একটি কার্যকরী মডিউল 2 নমুনা অ্যাপ থাকা। আপনি যদি সেই টিউটোরিয়ালটি সম্পন্ন করেন তবে আপনার সমাধানটি ব্যবহার করুন। আপনি এখন এটি সম্পূর্ণ করতে পারেন (উপরের লিঙ্ক), অথবা আপনি যদি এটি এড়িয়ে যেতে চান, তাহলে মডিউল 2 রেপো (নীচের লিঙ্ক) অনুলিপি করুন।
আপনি আপনার বা আমাদের ব্যবহার করুন না কেন, মডিউল 2 কোড যেখানে আমরা শুরু করব। এই মডিউল 3 কোডল্যাবটি আপনাকে প্রতিটি ধাপে নিয়ে যায় এবং সম্পূর্ণ হলে, এটি ফিনিশ পয়েন্টে কোডের অনুরূপ হওয়া উচিত। এই টিউটোরিয়ালটির পাইথন 2 এবং 3 সংস্করণ রয়েছে, তাই নীচের সঠিক কোড রেপোটি ধরুন।
পাইথন 2
- শুরু: মডিউল 2 কোড
- ফিনিশ: মডিউল 3 কোড
- সম্পূর্ণ রেপো (ক্লোন বা জিপ ডাউনলোড করতে)
পাইথন 2 মডিউল 2 স্টার্টিং ফাইলের ডিরেক্টরি (আপনার বা আমাদের) এইরকম হওয়া উচিত:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
আপনি যদি মডিউল 2 টিউটোরিয়ালটি সম্পূর্ণ করেন তবে আপনার কাছে ফ্লাস্ক এবং এর নির্ভরতা সহ একটি lib
ফোল্ডারও থাকবে। আপনার যদি lib
ফোল্ডার না থাকে, pip install -t lib -r requirements.txt
কমান্ড দিয়ে এটি তৈরি করুন যাতে আমরা পরবর্তী ধাপে এই বেসলাইন অ্যাপটি স্থাপন করতে পারি। আপনার যদি Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে, তাহলে Python 3 এর সাথে বিভ্রান্তি এড়াতে আমরা pip
এর পরিবর্তে pip2
ব্যবহার করার পরামর্শ দিই।
পাইথন 3
- শুরু: মডিউল 2 রেপো
- ফিনিশ: মডিউল 3 রেপো
- সম্পূর্ণ রেপো (ক্লোন বা জিপ ডাউনলোড করতে)
পাইথন 3 মডিউল 2 স্টার্টিং ফাইল (আপনার বা আমাদের) এর ডিরেক্টরিটি এইরকম হওয়া উচিত:
$ ls
README.md main.py templates
app.yaml requirements.txt
Python 3 এর জন্য lib
বা appengine_config.py
উভয়ই ব্যবহার করা হয় না।
3. (পুনরায়) মডিউল 2 অ্যাপ স্থাপন করুন
এখন চালানোর জন্য আপনার অবশিষ্ট প্রিওয়ার্ক পদক্ষেপগুলি:
-
gcloud
কমান্ড-লাইন টুলের সাথে নিজেকে পুনরায় পরিচিত করুন (যদি NEC।) - (পুনরায়) অ্যাপ ইঞ্জিনে মডিউল 1 কোড স্থাপন করুন (যদি NEC।)
একবার আপনি সফলভাবে এই পদক্ষেপগুলি সম্পাদন করেছেন এবং এটি কার্যকরী নিশ্চিত করার পরে, আমরা কনফিগারেশন ফাইলগুলি দিয়ে শুরু করে এই টিউটোরিয়ালটিতে এগিয়ে যাব।
4. ক্লাউড ডেটাস্টোর ক্লায়েন্ট লাইব্রেরি দিয়ে ক্লাউড এনডিবি প্রতিস্থাপন করুন
শুধুমাত্র কনফিগারেশন পরিবর্তন হল আপনার requirements.txt
ফাইলে একটি ছোট প্যাকেজ সোয়াপ।
1. requirements.txt
আপডেট করুন
মডিউল 2 সম্পূর্ণ করার পরে, আপনার requirements.txt
ফাইলটি এইরকম দেখায়:
- আগে (পাইথন 2 এবং 3):
Flask==1.1.2
google-cloud-ndb==1.7.1
ক্লাউড ডেটাস্টোর লাইব্রেরির সর্বশেষ সংস্করণ ( google-cloud-ndb
google-cloud-datastore
ndb ) প্রতিস্থাপন করে requirements.txt
আপডেট করুন, ক্লাউড ডেটাস্টোরের চূড়ান্ত সংস্করণের কথা মাথায় রেখে ফ্লাস্কের এন্ট্রি অক্ষত রেখে এটি পাইথন 2 সামঞ্জস্যপূর্ণ 1.15.3:
- পরে (পাইথন 2):
Flask==1.1.2
google-cloud-datastore==1.15.3
- পরে (পাইথন 3):
Flask==1.1.2
google-cloud-datastore==2.1.0
মনে রাখবেন যে রেপো এই টিউটোরিয়ালের চেয়ে নিয়মিতভাবে রক্ষণাবেক্ষণ করা হয়, তাই এটি সম্ভব যে requirements.txt
ফাইলটি নতুন সংস্করণগুলিকে প্রতিফলিত করতে পারে। আমরা প্রতিটি লাইব্রেরির সর্বশেষ সংস্করণ ব্যবহার করার পরামর্শ দিই, কিন্তু যদি সেগুলি কাজ না করে, তাহলে আপনি একটি পুরানো রিলিজে ফিরে যেতে পারেন৷ এই কোডল্যাব শেষবার যখন আপডেট করা হয়েছিল তখন উপরের সংস্করণ সংখ্যাগুলি সর্বশেষ।
2. অন্যান্য কনফিগারেশন ফাইল
অন্যান্য কনফিগারেশন ফাইল, app.yaml
এবং appengine_config.py
, পূর্ববর্তী মাইগ্রেশন ধাপ থেকে অপরিবর্তিত থাকা উচিত:
-
app.yaml
(এখনও) 3য়-পক্ষের বান্ডিল প্যাকেজgrpcio
এবংsetuptools
উল্লেখ করা উচিত। -
appengine_config.py
এর উচিত (এখনও)pkg_resources
এবংgoogle.appengine.ext.vendor
lib
এর তৃতীয়-পক্ষের সংস্থানগুলিতে নির্দেশ করা।
এখন আসুন অ্যাপ্লিকেশন ফাইলগুলিতে যাওয়া যাক।
5. অ্যাপ্লিকেশন ফাইল আপডেট করুন
template/index.html
এ কোন পরিবর্তন নেই, তবে main.py
এর জন্য কিছু আপডেট আছে।
1. আমদানি
আমদানি বিভাগের জন্য শুরুর কোডটি নিম্নরূপ হওয়া উচিত:
- আগে:
from flask import Flask, render_template, request
from google.cloud import ndb
ক্লাউড ডেটাস্টোরের জন্য একটি দিয়ে google.cloud.ndb
আমদানি প্রতিস্থাপন করুন: google.cloud.datastore
। যেহেতু Datastore ক্লায়েন্ট লাইব্রেরি একটি সত্তার মধ্যে একটি টাইমস্ট্যাম্প ক্ষেত্রের স্বয়ংক্রিয়-সৃষ্টি সমর্থন করে না, ম্যানুয়ালি একটি তৈরি করতে স্ট্যান্ডার্ড লাইব্রেরি datetime
মডিউলও আমদানি করুন৷ নিয়ম অনুসারে, স্ট্যান্ডার্ড লাইব্রেরি আমদানি তৃতীয় পক্ষের প্যাকেজ আমদানির উপরে যায়। যখন আপনি এই পরিবর্তনগুলি সম্পন্ন করেন, তখন এটি এইরকম হওয়া উচিত:
- পরে:
from datetime import datetime
from flask import Flask, render_template, request
from google.cloud import datastore
2. সূচনা এবং ডেটা মডেল
ফ্লাস্ক শুরু করার পরে, মডিউল 2 নমুনা অ্যাপটি একটি NDB ডেটা মডেল ক্লাস তৈরি করে এবং এর ক্ষেত্রগুলি নিম্নরূপ:
- আগে:
app = Flask(__name__)
ds_client = ndb.Client()
class Visit(ndb.Model):
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
ক্লাউড ডেটাস্টোর লাইব্রেরিতে এমন একটি ক্লাস নেই, তাই Visit
ক্লাস ঘোষণা মুছে দিন। ডেটাস্টোরের সাথে কথা বলার জন্য আপনার এখনও একজন ক্লায়েন্টের প্রয়োজন, তাই ndb.Client()
পরিবর্তন করে datastore.Client()
করুন। ডেটাস্টোর লাইব্রেরিটি আরও "নমনীয়", যা আপনাকে NDB-এর মতো তাদের গঠন "প্রি-ডিক্লেয়ারিং" ছাড়াই সত্তা তৈরি করতে দেয়। এই আপডেটের পরে, main.py
এর এই অংশটি দেখতে হবে:
- পরে:
app = Flask(__name__)
ds_client = datastore.Client()
3. ডেটাস্টোর অ্যাক্সেস
ক্লাউড ডেটাস্টোরে স্থানান্তরিত করার জন্য আপনি কীভাবে ডেটাস্টোর সত্তা তৈরি, সঞ্চয় এবং অনুসন্ধান করবেন তা পরিবর্তন করতে হবে (ব্যবহারকারী-স্তরে)। আপনার অ্যাপ্লিকেশনের জন্য, এই স্থানান্তরের অসুবিধা আপনার ডেটাস্টোর কোড কতটা জটিল তার উপর নির্ভর করে। আমাদের নমুনা অ্যাপে, আমরা আপডেটটিকে যতটা সম্ভব সহজবোধ্য করার চেষ্টা করেছি। এখানে আমাদের শুরুর কোড:
- আগে:
def store_visit(remote_addr, user_agent):
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
with ds_client.context():
return (v.to_dict() for v in Visit.query().order(
-Visit.timestamp).fetch_page(limit)[0])
ক্লাউড ডেটাস্টোরের সাথে, একটি সাধারণ সত্তা তৈরি করুন, একটি "কী" দিয়ে আপনার সত্তার গোষ্ঠীবদ্ধ বস্তুগুলিকে চিহ্নিত করুন৷ কী-মানের জোড়াগুলির একটি JSON অবজেক্ট (Python dict
) দিয়ে ডেটা রেকর্ড তৈরি করুন, তারপরে প্রত্যাশিত put()
দিয়ে ডেটাস্টোরে লিখুন। ডেটাস্টোরের সাথে অনুসন্ধান একই রকম তবে আরও সহজবোধ্য। এখানে আপনি দেখতে পারেন কিভাবে সমতুল্য Datastore কোড ভিন্ন হয়:
- পরে:
def store_visit(remote_addr, user_agent):
entity = datastore.Entity(key=ds_client.key('Visit'))
entity.update({
'timestamp': datetime.now(),
'visitor': '{}: {}'.format(remote_addr, user_agent),
})
ds_client.put(entity)
def fetch_visits(limit):
query = ds_client.query(kind='Visit')
query.order = ['-timestamp']
return query.fetch(limit=limit)
store_visit()
এবং fetch_visits()
এর জন্য ফাংশন বডিগুলিকে আপডেট করুন, তাদের স্বাক্ষরগুলিকে পূর্ববর্তী সংস্করণের সাথে অভিন্ন রেখে। প্রধান হ্যান্ডলার root()
এ কোন পরিবর্তন নেই। এই পরিবর্তনগুলি সম্পূর্ণ করার পরে, আপনার অ্যাপটি এখন ক্লাউড ডেটাস্টোর ব্যবহার করার জন্য প্রস্তুত এবং পরীক্ষার জন্য প্রস্তুত৷
6. সারাংশ/পরিষ্কার
অ্যাপ্লিকেশন স্থাপন
gcloud app deploy
এর সাথে আপনার অ্যাপ পুনরায় স্থাপন করুন এবং অ্যাপটি কাজ করছে তা নিশ্চিত করুন। আপনার কোড এখন মডিউল 3 রেপো ফোল্ডারে যা আছে তার সাথে মেলে:
আপনি যদি পূর্ববর্তী কোডল্যাবগুলির কোনওটি না করে এই সিরিজে ঝাঁপিয়ে পড়েন তবে অ্যাপটি নিজেই পরিবর্তন হবে না; এটি মূল ওয়েব পৃষ্ঠায় সমস্ত পরিদর্শন নিবন্ধন করে ( /
) এবং আপনি একবার সাইটটিতে পর্যাপ্ত বার পরিদর্শন করার পরে এটির মতো দেখায়:
এই মডিউল 3 কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। আপনি এখন জানেন যে আপনি ডেটাস্টোর অ্যাক্সেস করতে ক্লাউড এনডিবি এবং ক্লাউড ডেটাস্টোর ক্লায়েন্ট লাইব্রেরি উভয়ই ব্যবহার করতে পারেন। পরবর্তীতে স্থানান্তরিত করে, আপনি এখন ভাগ করা লাইব্রেরি, সাধারণ কোড এবং ধারাবাহিকতার জন্য কোড পুনঃব্যবহার এবং রক্ষণাবেক্ষণের কম খরচের সুবিধা পেতে পারেন।
ঐচ্ছিক: পরিষ্কার করুন
আপনি পরবর্তী মাইগ্রেশন কোডল্যাবে যাওয়ার জন্য প্রস্তুত না হওয়া পর্যন্ত বিল এড়াতে পরিষ্কার করার বিষয়ে কী করবেন? বিদ্যমান বিকাশকারী হিসাবে, আপনি সম্ভবত ইতিমধ্যেই অ্যাপ ইঞ্জিনের মূল্যের তথ্যে আপ-টু-স্পীড করছেন৷
ঐচ্ছিক: অ্যাপ অক্ষম করুন
আপনি যদি পরবর্তী টিউটোরিয়ালে যেতে এখনও প্রস্তুত না হন, তাহলে চার্জ এড়াতে আপনার অ্যাপটি অক্ষম করুন । আপনি যখন পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হন, আপনি এটি পুনরায় সক্ষম করতে পারেন৷ আপনার অ্যাপটি অক্ষম থাকাকালীন, এটি চার্জ করার জন্য কোনও ট্রাফিক পাবে না, তবে আরেকটি জিনিস যা আপনি বিল পেতে পারেন তা হল আপনার ডেটাস্টোর ব্যবহার যদি এটি বিনামূল্যের কোটা অতিক্রম করে, তাই সেই সীমার মধ্যে পড়ার জন্য যথেষ্ট মুছে ফেলুন৷
অন্যদিকে, আপনি যদি মাইগ্রেশন চালিয়ে যেতে না চান এবং সবকিছু সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে আপনি আপনার প্রকল্পটি বন্ধ করতে পারেন।
পরবর্তী পদক্ষেপ
এখান থেকে, এই পরবর্তী মাইগ্রেশন মডিউলগুলি অন্বেষণ করতে নির্দ্বিধায়:
- মডিউল 3 বোনাস: পাইথন 3 এবং পরবর্তী প্রজন্মের অ্যাপ ইঞ্জিন রানটাইমে কীভাবে পোর্ট করতে হয় তা শিখতে বোনাস বিভাগে চালিয়ে যান।
- মডিউল 7: অ্যাপ ইঞ্জিন পুশ টাস্ক সারি (আপনি [পুশ] টাস্ক সারি ব্যবহার করলে প্রয়োজনীয়)
- মডিউল 1 অ্যাপে অ্যাপ ইঞ্জিন
taskqueue
পুশ টাস্ক যোগ করে - মডিউল 8-এ ক্লাউড টাস্কে মাইগ্রেট করার জন্য ব্যবহারকারীদের প্রস্তুত করে
- মডিউল 1 অ্যাপে অ্যাপ ইঞ্জিন
- মডিউল 4: ডকার দিয়ে ক্লাউড রানে মাইগ্রেট করুন
- ক্লাউড রান উইথ ডকারে চালানোর জন্য আপনার অ্যাপটি কন্টেইনারাইজ করুন
- আপনাকে পাইথন 2 এ থাকার অনুমতি দেয়
- মডিউল 5: ক্লাউড বিল্ডপ্যাক সহ ক্লাউড রানে মাইগ্রেট করুন
- ক্লাউড বিল্ডপ্যাকগুলির সাথে ক্লাউড রানে চালানোর জন্য আপনার অ্যাপটি কন্টেইনারাইজ করুন
- ডকার, কন্টেইনার বা
Dockerfile
সম্পর্কে কিছু জানার দরকার নেই - আপনার অ্যাপটি ইতিমধ্যেই পাইথন 3-এ স্থানান্তরিত করা প্রয়োজন
- মডিউল 6: ক্লাউড ফায়ারস্টোরে মাইগ্রেট করুন
- Firebase বৈশিষ্ট্যগুলি অ্যাক্সেস করতে ক্লাউড ফায়ারস্টোরে স্থানান্তর করুন৷
- যদিও ক্লাউড ফায়ারস্টোর পাইথন 2 সমর্থন করে, এই কোডল্যাবটি শুধুমাত্র পাইথন 3 এ উপলব্ধ।
7. বোনাস: Python 3-এ মাইগ্রেট করুন
সর্বশেষ অ্যাপ ইঞ্জিন রানটাইম এবং বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য, আমরা আপনাকে পাইথন 3-এ স্থানান্তরিত করার পরামর্শ দিই। আমাদের নমুনা অ্যাপে, ডেটাস্টোর ছিল একমাত্র অন্তর্নির্মিত পরিষেবা যা আমরা ব্যবহার করতাম এবং যেহেতু আমরা ndb
থেকে ক্লাউড NDB-তে স্থানান্তরিত হয়েছি, আমরা এখন করতে পারি। অ্যাপ ইঞ্জিনের পাইথন 3 রানটাইমে পোর্ট করুন।
ওভারভিউ
পাইথন 3-এ পোর্ট করা Google ক্লাউড টিউটোরিয়ালের সুযোগের মধ্যে না থাকলেও, কোডল্যাবের এই অংশটি ডেভেলপারদের একটি ধারণা দেয় যে পাইথন 3 অ্যাপ ইঞ্জিন রানটাইম কীভাবে আলাদা। পরবর্তী প্রজন্মের রানটাইমের একটি অসামান্য বৈশিষ্ট্য হল তৃতীয় পক্ষের প্যাকেজগুলিতে সরলীকৃত অ্যাক্সেস: app.yaml
এ অন্তর্নির্মিত প্যাকেজগুলি নির্দিষ্ট করার প্রয়োজন নেই বা অ -বিল্ট-ইন লাইব্রেরিগুলি অনুলিপি বা আপলোড করার প্রয়োজন নেই; এগুলি requirements.txt
এ তালিকাভুক্ত থেকে নিহিতভাবে ইনস্টল করা হয়েছে
যেহেতু আমাদের নমুনাটি খুবই মৌলিক এবং ক্লাউড ডেটাস্টোরটি পাইথন 2-3 সামঞ্জস্যপূর্ণ, কোনও অ্যাপ্লিকেশন কোড স্পষ্টভাবে 3.x এ পোর্ট করার প্রয়োজন নেই: অ্যাপটি 2.x এবং 3.x অপরিবর্তিতভাবে চলে, যার অর্থ শুধুমাত্র প্রয়োজনীয় পরিবর্তনগুলি কনফিগারেশনে রয়েছে এই ক্ষেত্রে:
- Python 3 রেফারেন্স করতে
app.yaml
সরলীকরণ করুন এবং বান্ডেল করা 3য়-পার্টি লাইব্রেরির রেফারেন্স সরান। -
appengine_config.py
এবংlib
ফোল্ডার মুছুন কারণ সেগুলি আর প্রয়োজন নেই।
main.py
এবং templates/index.html
অ্যাপ্লিকেশন ফাইল অপরিবর্তিত থাকে।
requirements.txt
আপডেট করুন
পাইথন 2 সমর্থনকারী ক্লাউড ডেটাস্টোরের চূড়ান্ত সংস্করণ হল 1.15.3। Python 3-এর সর্বশেষ সংস্করণের সাথে requirements.txt
আপডেট করুন (এখন আরও নতুন হতে পারে)। যখন এই টিউটোরিয়ালটি লেখা হয়েছিল, সর্বশেষ সংস্করণটি ছিল 2.1.0, তাই এই লাইনটি সম্পাদনা করুন (বা সর্বশেষ সংস্করণ যাই হোক না কেন):
google-cloud-datastore==2.1.0
সরলীকরণ app.yaml
আগে:
এই নমুনা অ্যাপের একমাত্র আসল পরিবর্তন হল app.yaml
উল্লেখযোগ্যভাবে ছোট করা। একটি অনুস্মারক হিসাবে, মডিউল 3 এর উপসংহারে app.yaml
এ আমাদের যা ছিল তা এখানে:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
libraries:
- name: grpcio
version: 1.0.0
- name: setuptools
version: 36.6.0
পরে:
Python 3-এ, threadsafe
, api_version
, এবং libraries
নির্দেশাবলী সবই বাতিল করা হয়েছে; সমস্ত অ্যাপগুলিকে থ্রেডসেফ বলে মনে করা হয় এবং পাইথন 3-এ api_version
ব্যবহার করা হয় না। অ্যাপ ইঞ্জিন পরিষেবাগুলিতে আর বিল্ট-ইন তৃতীয় পক্ষের প্যাকেজগুলি আগে থেকে ইনস্টল করা নেই, তাই libraries
বাতিল করা হয়েছে। এই পরিবর্তনগুলি সম্পর্কে আরও তথ্যের জন্য app.yaml
এ পরিবর্তনের ডকুমেন্টেশন দেখুন। ফলস্বরূপ, আপনাকে app.yaml
থেকে তিনটিই মুছে ফেলতে হবে এবং একটি সমর্থিত Python 3 সংস্করণে আপডেট করতে হবে (নীচে দেখুন)।
ঐচ্ছিক: handlers
নির্দেশিকা ব্যবহার
এছাড়াও, handlers
নির্দেশিকা, যা অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলিতে ট্র্যাফিক পরিচালনা করে তাও অবমূল্যায়িত করা হয়েছে। যেহেতু পরবর্তী প্রজন্মের রানটাইম আশা করে যে ওয়েব ফ্রেমওয়ার্কগুলি অ্যাপ রাউটিং পরিচালনা করবে, তাই সমস্ত "হ্যান্ডলার স্ক্রিপ্ট" অবশ্যই " auto
" তে পরিবর্তন করতে হবে। উপরে থেকে পরিবর্তনগুলি একত্রিত করে, আপনি এই app.yaml
এ পৌঁছেছেন:
runtime: python38
handlers:
- url: /.*
script: auto
স্ক্রিপ্ট সম্পর্কে আরও জানুন: app.yaml
রেফারেন্স পৃষ্ঠা থেকে script: auto
।
handlers
নির্দেশিকা অপসারণ
যেহেতু handlers
অবমূল্যায়ন করা হয়েছে, আপনি একটি একক-লাইন app.yaml
বাদ দিয়ে সম্পূর্ণ বিভাগটিও সরাতে পারেন :
runtime: python38
ডিফল্টরূপে, এটি Gunicorn WSGI ওয়েব সার্ভার চালু করবে যা সমস্ত অ্যাপ্লিকেশনের জন্য উপলব্ধ। আপনি যদি gunicorn
সাথে পরিচিত হন, তাহলে এটি barebones app.yaml
এর সাথে ডিফল্টরূপে শুরু হলে এটি কার্যকর করা হয় :
gunicorn main:app --workers 2 -c /config/gunicorn.py
ঐচ্ছিক: entrypoint
নির্দেশের ব্যবহার
যাইহোক, যদি আপনার অ্যাপ্লিকেশনের জন্য একটি নির্দিষ্ট স্টার্ট-আপ কমান্ডের প্রয়োজন হয়, যা একটি entrypoint
নির্দেশিকা দিয়ে নির্দিষ্ট করা যেতে পারে, যার ফলে একটি app.yaml
যা দেখতে এই রকম:
runtime: python38
entrypoint: python main.py
এই উদাহরণটি বিশেষভাবে gunicorn
পরিবর্তে ফ্লাস্ক ডেভেলপমেন্ট সার্ভার ব্যবহার করার অনুরোধ করে। পোর্ট 8080-এর 0.0.0.0
ইন্টারফেসে লঞ্চ করার জন্য যে কোডটি ডেভেলপমেন্ট সার্ভার শুরু করে তা আপনার অ্যাপে যোগ করতে হবে main.py
এর নীচে এই ছোট অংশটি যোগ করে:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
app.yaml
রেফারেন্স পৃষ্ঠা থেকে entrypoint
সম্পর্কে আরও জানুন। অ্যাপ ইঞ্জিন স্ট্যান্ডার্ড এনভায়রনমেন্ট স্টার্টআপ ডক্সের পাশাপাশি অ্যাপ ইঞ্জিন নমনীয় এনভায়রনমেন্ট স্টার্টআপ ডক্সে আরও উদাহরণ এবং সেরা অনুশীলন পাওয়া যাবে।
appengine_config.py
এবং lib
মুছুন
appengine_config.py
ফাইল এবং lib
ফোল্ডার মুছুন। Python 3-এ স্থানান্তরিত করার সময়, App Engine requirements.txt
এ তালিকাভুক্ত প্যাকেজগুলি অর্জন করে এবং ইনস্টল করে।
appengine_config.py
কনফিগার ফাইলটি তৃতীয় পক্ষের লাইব্রেরি/প্যাকেজগুলি সনাক্ত করতে ব্যবহার করা হয়, আপনি সেগুলি নিজে কপি করেছেন বা অ্যাপ ইঞ্জিন সার্ভারে (বিল্ট-ইন) আগে থেকেই উপলব্ধ একটি ব্যবহার করেছেন। পাইথন 3 এ যাওয়ার সময়, বড় পরিবর্তনগুলির একটি সারসংক্ষেপ হল:
- অনুলিপি করা তৃতীয় পক্ষের লাইব্রেরির কোনো বান্ডলিং নেই (
requirements.txt
এ তালিকাভুক্ত) - কোনো
lib
ফোল্ডারে কোনোpip install
যাবে না, মানে কোনোlib
ফোল্ডারের মেয়াদ নেই -
app.yaml
এ বিল্ট-ইন তৃতীয় পক্ষের লাইব্রেরির কোনো তালিকা নেই - তৃতীয় পক্ষের লাইব্রেরিতে অ্যাপের উল্লেখ করার দরকার নেই, তাই কোনো
appengine_config.py
ফাইল নেই
requirements.txt
.txt-এ সমস্ত প্রয়োজনীয় তৃতীয় পক্ষের লাইব্রেরি তালিকাভুক্ত করাই প্রয়োজন।
অ্যাপ্লিকেশন স্থাপন
এটি কাজ করে তা নিশ্চিত করতে আপনার অ্যাপটি পুনরায় স্থাপন করুন। আপনি মডিউল 3 নমুনা পাইথন 3 কোডের সাথে আপনার সমাধান কতটা কাছাকাছি তা নিশ্চিত করতে পারেন। Python 2 এর সাথে পার্থক্যগুলি কল্পনা করতে, কোডটিকে এর Python 2 সংস্করণের সাথে তুলনা করুন।
মডিউল 3 এ বোনাস ধাপ শেষ করার জন্য অভিনন্দন! Python 3 রানটাইমের জন্য কনফিগারেশন ফাইল প্রস্তুত করার ডকুমেন্টেশন দেখুন। অবশেষে, পরবর্তী পদক্ষেপ এবং পরিষ্কারের জন্য উপরের পূর্ববর্তী সারাংশটি পর্যালোচনা করুন।
আপনার আবেদন প্রস্তুত করা হচ্ছে
আপনার অ্যাপ্লিকেশন স্থানান্তর করার সময় হলে, আপনাকে আপনার main.py
এবং অন্যান্য অ্যাপ্লিকেশন ফাইলগুলিকে 3.x এ পোর্ট করতে হবে, তাই একটি সর্বোত্তম অনুশীলন হল আপনার 2.x অ্যাপ্লিকেশনটিকে "ফরোয়ার্ড-সামঞ্জস্যপূর্ণ" হিসাবে তৈরি করার জন্য যথাসাধ্য চেষ্টা করা সম্ভব
এটি সম্পন্ন করতে আপনাকে সাহায্য করার জন্য প্রচুর অনলাইন সংস্থান রয়েছে, তবে কিছু মূল টিপস:
- নিশ্চিত করুন যে সমস্ত অ্যাপ্লিকেশন নির্ভরতা সম্পূর্ণরূপে 3.x-সামঞ্জস্যপূর্ণ
- নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশন কমপক্ষে 2.6 (বিশেষত 2.7) এ চলে
- নিশ্চিত করুন যে আবেদনটি সম্পূর্ণ পরীক্ষা স্যুট পাস করেছে (এবং সর্বনিম্ন 80% কভারেজ)
-
six
, ফিউচার এবং/অথবা আধুনিকীকরণের মতো সামঞ্জস্যপূর্ণ লাইব্রেরি ব্যবহার করুন - কী পিছনের দিকে-বেমানান 2.x বনাম 3.x পার্থক্য সম্পর্কে নিজেকে শিক্ষিত করুন
- যেকোন I/O সম্ভবত ইউনিকোড বনাম বাইট স্ট্রিং অসামঞ্জস্যতার দিকে নিয়ে যাবে
নমুনা অ্যাপটি এই সমস্ত কিছু মাথায় রেখে ডিজাইন করা হয়েছে, তাই কেন অ্যাপটি বাক্সের বাইরে 2.x এবং 3.x এ চলে যাতে আমরা আপনাকে দেখানোর উপর ফোকাস করতে পারি পরবর্তী-জেন প্ল্যাটফর্মটি ব্যবহার করার জন্য কী পরিবর্তন করতে হবে। .
8. অতিরিক্ত সম্পদ
অ্যাপ ইঞ্জিন মাইগ্রেশন মডিউল কোডল্যাব সমস্যা/প্রতিক্রিয়া
আপনি যদি এই কোডল্যাবের সাথে কোনো সমস্যা খুঁজে পান, অনুগ্রহ করে ফাইল করার আগে প্রথমে আপনার সমস্যাটি অনুসন্ধান করুন। অনুসন্ধান এবং নতুন সমস্যা তৈরি করার লিঙ্ক:
মাইগ্রেশন সম্পদ
মডিউল 2 (স্টার্ট) এবং মডিউল 3 (ফিনিশ) এর জন্য রেপো ফোল্ডারগুলির লিঙ্কগুলি নীচের টেবিলে পাওয়া যাবে। এগুলি সমস্ত অ্যাপ ইঞ্জিন মাইগ্রেশনের জন্য রেপো থেকে অ্যাক্সেস করা যেতে পারে যা আপনি একটি ZIP ফাইল ক্লোন বা ডাউনলোড করতে পারেন।
কোডল্যাব | পাইথন 2 | পাইথন 3 |
মডিউল 3 |
অ্যাপ ইঞ্জিন সম্পদ
নীচে এই নির্দিষ্ট মাইগ্রেশন সম্পর্কিত অতিরিক্ত সংস্থান রয়েছে:
- পাইথন ক্লাউড এনডিবি এবং ক্লাউড ডেটাস্টোর রেফারেন্স
- Python 3 এবং GAE পরবর্তী প্রজন্মের রানটাইমে স্থানান্তর করা হচ্ছে
- সাধারণ