1. সংক্ষিপ্ত বিবরণ
এই কোডল্যাব সিরিজের (স্ব-গতিসম্পন্ন, হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হল গুগল অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড) ডেভেলপারদের তাদের অ্যাপগুলিকে আধুনিকীকরণের মাধ্যমে একাধিক মাইগ্রেশনের মাধ্যমে পরিচালনা করতে সাহায্য করা। সবচেয়ে গুরুত্বপূর্ণ পদক্ষেপ হল মূল রানটাইম বান্ডেলড পরিষেবাগুলি থেকে সরে আসা কারণ পরবর্তী প্রজন্মের রানটাইমগুলি আরও নমনীয়, ব্যবহারকারীদের আরও বৈচিত্র্যময় পরিষেবা বিকল্প প্রদান করে। নতুন প্রজন্মের রানটাইমে স্থানান্তর আপনাকে গুগল ক্লাউড পণ্যগুলির সাথে আরও সহজে সংহত করতে, সমর্থিত পরিষেবাগুলির বিস্তৃত পরিসর ব্যবহার করতে এবং বর্তমান ভাষা প্রকাশগুলিকে সমর্থন করতে সক্ষম করে।
এই টিউটোরিয়ালটি আপনাকে শেখাবে কিভাবে অ্যাপ ইঞ্জিনের বিল্ট-ইন ndb (নেক্সট ডেটাবেস) ক্লায়েন্ট লাইব্রেরি থেকে ক্লাউড NDB ক্লায়েন্ট লাইব্রেরিতে মাইগ্রেট করতে হয়।
তুমি শিখবে কিভাবে
- অ্যাপ ইঞ্জিন
ndbলাইব্রেরি ব্যবহার করুন (যদি আপনি এটির সাথে অপরিচিত হন) -
ndbথেকে Cloud NDB-তে মাইগ্রেট করুন - আপনার অ্যাপটি আরও Python 3 এ স্থানান্তর করুন।
তোমার যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প যার সাথে:
- পাইথনের মৌলিক দক্ষতা
- সাধারণ লিনাক্স কমান্ডের কার্যকরী জ্ঞান
- অ্যাপ ইঞ্জিন অ্যাপ তৈরি এবং স্থাপনের প্রাথমিক জ্ঞান।
- একটি কার্যকরী মডিউল ১ অ্যাপ ইঞ্জিন অ্যাপ
জরিপ
আপনি এই কোডল্যাবটি কীভাবে ব্যবহার করবেন?
2. পটভূমি
মডিউল ১-এ, আমরা ওয়েব ফ্রেমওয়ার্কগুলিকে অ্যাপ ইঞ্জিনের অন্তর্নির্মিত webapp2 থেকে ফ্লাস্কে স্থানান্তরিত করেছি। এই কোডল্যাবে, আমরা অ্যাপ ইঞ্জিনের ndb লাইব্রেরি থেকে গুগল ক্লাউড এনডিবিতে স্যুইচ করে অ্যাপ ইঞ্জিনের অন্তর্নির্মিত পরিষেবাগুলি থেকে দূরে সরে যাচ্ছি।
এই মাইগ্রেশন সম্পন্ন করার মাধ্যমে, আপনি তারপর করতে পারবেন:
- পাইথন ৩ এবং পরবর্তী প্রজন্মের অ্যাপ ইঞ্জিন রানটাইমে মাইগ্রেট করুন
- ক্লাউড ডেটাস্টোরে স্থানান্তর করুন (অ্যাপ ইঞ্জিন নয় এমন অ্যাপের জন্য ক্লায়েন্ট লাইব্রেরি)
- আপনার পাইথন ২ (অথবা ৩) অ্যাপটি কনটেইনারাইজ করুন এবং ক্লাউড রানে মাইগ্রেট করুন।
- অ্যাপ ইঞ্জিন (পুশ) টাস্ক কিউ ব্যবহার করুন এবং তারপর ক্লাউড টাস্কে স্থানান্তর করুন
কিন্তু, আমরা এখনও সেখানে পৌঁছাইনি। পরবর্তী পদক্ষেপগুলি বিবেচনা করার আগে এই কোডল্যাবটি শেষ করুন। এই টিউটোরিয়ালে মাইগ্রেশনের প্রাথমিক ধাপগুলি রয়েছে:
- সেটআপ/প্রিওয়ার্ক
- ক্লাউড এনডিবি লাইব্রেরি যোগ করুন
- অ্যাপ্লিকেশন ফাইল আপডেট করুন
৩. সেটআপ/প্রিওয়ার্ক
টিউটোরিয়ালের মূল অংশে যাওয়ার আগে, আসুন আমাদের প্রকল্পটি সেটআপ করি, কোডটি পাই, তারপর বেসলাইন অ্যাপটি স্থাপন করি যাতে আমরা জানতে পারি যে আমরা কার্যকরী কোড দিয়ে শুরু করেছি।
১. সেটআপ প্রকল্প
যদি আপনি মডিউল ১ কোডল্যাব সম্পন্ন করে থাকেন, তাহলে আমরা একই প্রকল্প (এবং কোড) পুনরায় ব্যবহার করার পরামর্শ দিচ্ছি। বিকল্পভাবে, আপনি একটি নতুন প্রকল্প তৈরি করতে পারেন অথবা অন্য একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করতে পারেন। নিশ্চিত করুন যে প্রকল্পটির একটি সক্রিয় বিলিং অ্যাকাউন্ট আছে এবং অ্যাপ ইঞ্জিন সক্রিয় আছে।
2. বেসলাইন নমুনা অ্যাপ পান
পূর্বশর্তগুলির মধ্যে একটি হল একটি কার্যকরী মডিউল ১ নমুনা অ্যাপ থাকা। যদি আপনি টিউটোরিয়ালটি সম্পন্ন করে থাকেন তবে আপনার সমাধানটি ব্যবহার করুন। আপনি এখনই এটি সম্পূর্ণ করতে পারেন (উপরের লিঙ্ক), অথবা যদি আপনি এটি এড়িয়ে যেতে চান, তাহলে মডিউল ১ রেপোটি অনুলিপি করুন (নীচের লিঙ্ক)।
আপনি আপনার অথবা আমাদের, যেটাই ব্যবহার করুন না কেন, মডিউল ১ কোড দিয়েই আমরা শুরু করব। এই মডিউল ২ কোডল্যাব আপনাকে প্রতিটি ধাপে নিয়ে যাবে, এবং সম্পূর্ণ হলে, এটি FINISH পয়েন্টে কোডের মতো হওয়া উচিত (পাইথন ২ থেকে ৩ পর্যন্ত একটি ঐচ্ছিক "বোনাস" পোর্ট সহ):
- শুরু: মডিউল ১ কোড
- শেষ: মডিউল ২ পাইথন ২ কোড (বোনাস: পাইথন ৩ কোড )
- সম্পূর্ণ রেপো (ক্লোন করতে বা জিপ ডাউনলোড করতে)
আপনার STARTING মডিউল 1 কোড ফোল্ডারে নিম্নলিখিত বিষয়বস্তু থাকা উচিত:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
যদি আপনি মডিউল ১ টিউটোরিয়ালটি সম্পন্ন করে থাকেন, তাহলে আপনার কাছে Flask এবং এর নির্ভরতা সহ একটি lib ফোল্ডারও থাকবে। যদি আপনার কাছে lib ফোল্ডার না থাকে, pip install -t lib -r requirements.txt কমান্ড ব্যবহার করে এটি তৈরি করুন যাতে আমরা পরবর্তী ধাপে এই বেসলাইন অ্যাপটি স্থাপন করতে পারি। যদি আপনার কাছে Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে, তাহলে Python 3 এর সাথে বিভ্রান্তি এড়াতে আমরা pip এর পরিবর্তে pip2 ব্যবহার করার পরামর্শ দিচ্ছি।
৩. (পুনরায়) মডিউল ১ অ্যাপ স্থাপন করুন
আপনার এখন কার্যকর করার জন্য বাকি প্রিওয়ার্ক ধাপগুলি:
-
gcloudকমান্ড-লাইন টুলের সাথে নিজেকে পুনরায় পরিচিত করুন (যদি প্রয়োজন হয়)। - (পুনরায়) অ্যাপ ইঞ্জিনে মডিউল ১ কোড স্থাপন করুন (যদি প্রয়োজন হয়)
একবার আপনি সফলভাবে এই পদক্ষেপগুলি সম্পাদন করার পরে এবং এটি কার্যকরী কিনা তা নিশ্চিত করার পরে, আমরা এই টিউটোরিয়ালে কনফিগারেশন ফাইলগুলি দিয়ে শুরু করব।
৪. কনফিগারেশন ফাইল আপডেট করুন (ক্লাউড এনডিবি লাইব্রেরি যোগ করুন)
অনেক অরিজিনাল অ্যাপ ইঞ্জিন বিল্ট-ইন পরিষেবা তাদের নিজস্ব পণ্যে পরিণত হয়েছে, এবং ডেটাস্টোর তাদের মধ্যে একটি। আজ নন-অ্যাপ ইঞ্জিন অ্যাপগুলি ক্লাউড ডেটাস্টোর ব্যবহার করতে পারে। দীর্ঘদিন ধরে ndb ব্যবহারকারীদের জন্য, গুগল ক্লাউড টিম ক্লাউড ডেটাস্টোরের সাথে কথা বলার জন্য ক্লাউড এনডিবি ক্লায়েন্ট লাইব্রেরি তৈরি করেছে। এটি পাইথন 2 এবং 3 উভয়ের জন্যই উপলব্ধ।
অ্যাপ ইঞ্জিন ndb ক্লাউড এনডিবি দিয়ে প্রতিস্থাপন করার জন্য কনফার্মেশন ফাইলগুলি আপডেট করি এবং তারপর আমাদের অ্যাপ্লিকেশনটি পরিবর্তন করি।
১. requirements.txt আপডেট করুন
মডিউল ১-এ, আমাদের অ্যাপের জন্য একমাত্র বহিরাগত নির্ভরতা ছিল Flask। এখন আমরা Cloud NDB যোগ করব। মডিউল ১-এর শেষে আপনার requirements.txt ফাইলটি কেমন দেখাচ্ছিল তা এখানে দেওয়া হল:
- আগে:
Flask==1.1.2
অ্যাপ ইঞ্জিন ndb থেকে দূরে সরে যাওয়ার জন্য ক্লাউড NDB লাইব্রেরি ( google-cloud-ndb ) প্রয়োজন, তাই এর প্যাকেজটি requirements.txt এ যোগ করুন।
- পরে:
Flask==1.1.2
google-cloud-ndb==1.7.1
যখন এই কোডল্যাবটি লেখা হয়েছিল, তখন সর্বশেষ প্রস্তাবিত সংস্করণটি ছিল 1.7.1, কিন্তু রেপোতে requirements.txt এর একটি নতুন সংস্করণ থাকতে পারে। আমরা প্রতিটি লাইব্রেরির সর্বশেষ সংস্করণগুলি সুপারিশ করি, তবে যদি সেগুলি কাজ না করে, তাহলে আপনি একটি পুরানো সংস্করণে ফিরে যেতে পারেন।
যদি আপনার lib ফোল্ডারটি থাকে এবং উপরে তৈরি না করে থাকেন, তাহলে তা মুছে ফেলুন। এখন (পুনরায়) আপডেট করা লাইব্রেরিগুলি pip install -t lib -r requirements.txt কমান্ড দিয়ে ইনস্টল করুন, প্রয়োজনে pip এর পরিবর্তে pip2 ব্যবহার করুন।
2. app.yaml আপডেট করুন
google-cloud-ndb এর মতো Google ক্লাউড ক্লায়েন্ট লাইব্রেরি যোগ করার জন্য কিছু প্রয়োজনীয়তা রয়েছে, যার সবকটিই "বিল্ট-ইন" লাইব্রেরি , Google সার্ভারে ইতিমধ্যেই উপলব্ধ তৃতীয় পক্ষের প্যাকেজ অন্তর্ভুক্ত করার চারপাশে ঘোরে। আপনি সেগুলি requirements.txt এ তালিকাভুক্ত করবেন না এবং pip install দিয়েও কপি করবেন না। একমাত্র প্রয়োজনীয়তা:
-
app.yamlএ বিল্ট-ইন লাইব্রেরি নির্দিষ্ট করুন - তাদের কপি করা তৃতীয় পক্ষের লাইব্রেরিগুলিতে নির্দেশ করুন যেখানে তারা কাজ করতে পারে (
libতে)
মডিউল ১ থেকে শুরু করা app.yaml এখানে দেওয়া হল:
- আগে:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
এখন app.yaml এ নিম্নলিখিত লাইনগুলি যোগ করুন যাতে তৃতীয় পক্ষের বান্ডেল করা প্যাকেজগুলির একটি জোড়া উল্লেখ করা যায়: grpcio এবং setuptools একটি নতুন libraries বিভাগে:
libraries:
- name: grpcio
version: 1.0.0
- name: setuptools
version: 36.6.0
এই বিল্ট-ইন লাইব্রেরিগুলি কেন ব্যবহার করবেন? gRPC হল একটি উন্মুক্ত RPC ফ্রেমওয়ার্ক যা google-cloud-ndb সহ সমস্ত Google ক্লাউড ক্লায়েন্ট লাইব্রেরি দ্বারা ব্যবহৃত হয়। grpcio লাইব্রেরি হল Python gRPC অ্যাডাপ্টার এবং তাই প্রয়োজনীয়। setuptools অন্তর্ভুক্ত করার যুক্তি সামনে আসছে।
- পরে:
উপরের পরিবর্তনগুলির সাথে, আপনার আপডেট করা 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
৩. appengine_config.py আপডেট করুন
setuptools লাইব্রেরির অংশ pkg_resources টুলটি বিল্ট-ইন থার্ড-পার্টি লাইব্রেরিগুলিকে বান্ডল করা লাইব্রেরিগুলিতে অ্যাক্সেস করার জন্য ব্যবহৃত হয়। appengine_config.py আপডেট করুন যাতে pkg_resources ব্যবহার করে lib এর বান্ডল করা লাইব্রেরিতে সেগুলি নির্দেশ করা যায়। এই পরিবর্তনটি সম্পন্ন করার পরে, সম্পূর্ণ ফাইলটি এইরকম দেখাবে:
import pkg_resources
from google.appengine.ext import vendor
# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
# Add libraries to pkg_resources working set to find the distribution.
pkg_resources.working_set.add_entry(PATH)
৫. অ্যাপ্লিকেশন ফাইল আপডেট করুন
কনফিগারেশন ফাইলের আনুষ্ঠানিকতা শেষ হওয়ায়, আপনি এখন ndb থেকে ক্লাউড NDB-তে মাইগ্রেট করতে পারবেন। মাইগ্রেশন সম্পন্ন করতে, আমদানি করা লাইব্রেরি আপডেট করুন এবং main.py তে কনটেক্সট ম্যানেজমেন্টের ব্যবহার যোগ করুন।
১. আমদানি
main.py তে নিম্নলিখিত আমদানি সোয়াপ করুন:
- আগে
from google.appengine.ext import ndb
- পরে:
from google.cloud import ndb
অ্যাপ ইঞ্জিন লাইব্রেরি থেকে গুগল ক্লাউড লাইব্রেরিতে পরিবর্তন কখনও কখনও এই উদাহরণের মতোই সূক্ষ্ম। যেসব বিল্ট-ইন পরিষেবা সম্পূর্ণ গুগল ক্লাউড পণ্যে পরিণত হয়েছে, তাদের জন্য আপনাকে google.appengine এর পরিবর্তে google.cloud থেকে অ্যাট্রিবিউট আমদানি করতে হবে।
2. ডেটাস্টোর অ্যাক্সেস
ক্লাউড এনডিবি লাইব্রেরি ব্যবহার করতে সক্ষম হওয়ার জন্য, আপনার অ্যাপটিকে পাইথন কনটেক্সট ম্যানেজার ব্যবহার করতে হবে। তাদের উদ্দেশ্য হল রিসোর্সগুলিতে অ্যাক্সেস "গেট" করা যাতে সেগুলি ব্যবহারের আগে অর্জন করতে হয়। কনটেক্সট ম্যানেজারগুলি রিসোর্স অ্যালোকেশন ইজ ইনিশিয়ালাইজেশন (বা RAII) নামে পরিচিত কম্পিউটার বিজ্ঞান নিয়ন্ত্রণ কৌশলের উপর ভিত্তি করে তৈরি। কনটেক্সট ম্যানেজারগুলি পাইথন ফাইলগুলির সাথে ব্যবহার করা হয় (যা অ্যাক্সেস করার আগে খোলা আবশ্যক) এবং কনকারেন্সি, " স্পিন লক " একটি " ক্রিটিকাল সেকশন "-এ কোড কার্যকর করার আগে অর্জন করতে হবে।
একইভাবে, ক্লাউড এনডিবি-র জন্য ডেটাস্টোর কমান্ড কার্যকর করার আগে ডেটাস্টোরের সাথে যোগাযোগ করার জন্য আপনাকে ক্লায়েন্টের প্রসঙ্গটি অর্জন করতে হবে। প্রথমে, Flask initialization এর ঠিক পরে main.py তে ds_client = ndb.Client() যোগ করে একটি ক্লায়েন্ট ( ndb.Client() ) তৈরি করুন:
app = Flask(__name__)
ds_client = ndb.Client()
পাইথন with কমান্ডটি কেবলমাত্র একটি বস্তুর প্রসঙ্গ জানার জন্য ব্যবহৃত হয়। ডেটাস্টোর অ্যাক্সেস করার জন্য যেকোনো কোড ব্লক স্টেটমেন্ট with মুড়ে দিন।
ডেটাস্টোরে একটি নতুন এন্টিটি লেখার জন্য এবং সাম্প্রতিকতম যোগ করা এন্টিটিগুলি প্রদর্শনের জন্য পড়ার জন্য মডিউল ১-এর একই ফাংশনগুলি নীচে দেওয়া হল:
- আগে:
এখানে প্রসঙ্গ ব্যবস্থাপনা ছাড়া মূল কোডটি রয়েছে:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return (v.to_dict() for v in Visit.query().order(
-Visit.timestamp).fetch(limit))
- পরে:
এখন with ds_client.context(): যুক্ত করুন এবং আপনার ডেটাস্টোর অ্যাক্সেস কোডটি with ব্লকে সরান:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
with ds_client.context():
return (v.to_dict() for v in Visit.query().order(
-Visit.timestamp).fetch(limit))
মূল ড্রাইভার অ্যাপ্লিকেশনটি মডিউল ১-এর মতোই থাকবে কারণ এখানে কোনও ndb (বা ক্লাউড NDB) কোড নেই:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
একটি সর্বোত্তম অনুশীলন হল অ্যাপ্লিকেশন কোড এবং ডেটা অ্যাক্সেসের মধ্যে স্পষ্ট পার্থক্য নিশ্চিত করা। এইভাবে, আপনার মূল অ্যাপ্লিকেশন কোডটি অন্তর্নিহিত ডেটা স্টোরেজ প্রক্রিয়া পরিবর্তন করলে পরিবর্তিত হয় না যেমনটি আমরা এই মাইগ্রেশনের ক্ষেত্রে করেছি।
৬. সারাংশ/পরিষ্কারকরণ
অ্যাপ্লিকেশন স্থাপন করুন
gcloud app deploy দিয়ে আপনার অ্যাপটি পুনরায় স্থাপন করুন এবং অ্যাপটি কাজ করছে কিনা তা নিশ্চিত করুন। আপনার কোডটি এখন Module 2 repo- তে থাকা কোডের সাথে মিলবে।
যদি আপনি পূর্ববর্তী কোডল্যাবগুলির কোনওটি না করেই এই সিরিজে ঝাঁপিয়ে পড়েন, তাহলে অ্যাপটি নিজেই পরিবর্তন হয় না; এটি মূল ওয়েব পৃষ্ঠায় ( / ) সমস্ত ভিজিট নিবন্ধন করে এবং আপনি যথেষ্ট বার সাইটটি পরিদর্শন করার পরে এটি দেখতে এরকম দেখাবে:

এই মডিউল ২ কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন। আপনি সবেমাত্র শেষ রেখা অতিক্রম করেছেন, কারণ ডেটাস্টোরের মতে এটি এই সিরিজের শেষ মাইগ্রেশন যা অত্যন্ত সুপারিশ করা হয়েছে ।
ঐচ্ছিক: পরিষ্কার করুন
পরবর্তী মাইগ্রেশন কোডল্যাবে যাওয়ার জন্য প্রস্তুত না হওয়া পর্যন্ত বিল এড়াতে পরিষ্কার করার কথা কী? বিদ্যমান ডেভেলপার হিসেবে, আপনি সম্ভবত অ্যাপ ইঞ্জিনের মূল্য নির্ধারণের তথ্য সম্পর্কে ইতিমধ্যেই আপ-টু-স্পিড।
ঐচ্ছিক: অ্যাপটি অক্ষম করুন
যদি আপনি এখনও পরবর্তী টিউটোরিয়ালে যেতে প্রস্তুত না হন, তাহলে চার্জ এড়াতে আপনার অ্যাপটি অক্ষম করুন । যখন আপনি পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হবেন, তখন আপনি এটি পুনরায় সক্ষম করতে পারবেন। আপনার অ্যাপটি অক্ষম থাকা অবস্থায়, চার্জ বহন করার জন্য কোনও ট্র্যাফিক পাবে না, তবে আরেকটি জিনিস যা আপনার ডেটাস্টোরের ব্যবহার বিনামূল্যের কোটা অতিক্রম করলে তার জন্য আপনাকে বিল করা হতে পারে, তাই সেই সীমার মধ্যে পড়ার জন্য যথেষ্ট মুছে ফেলুন।
অন্যদিকে, যদি আপনি মাইগ্রেশন চালিয়ে যেতে না চান এবং সবকিছু সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে আপনি আপনার প্রকল্পটি বন্ধ করে দিতে পারেন।
পরবর্তী পদক্ষেপ
এখান থেকে, আপনার পরবর্তী পদক্ষেপের ক্ষেত্রে নমনীয়তা রয়েছে। এই বিকল্পগুলির মধ্যে যেকোনো একটি বেছে নিন:
- মডিউল ২ বোনাস: পাইথন ৩-এ পোর্টিং এবং পরবর্তী প্রজন্মের অ্যাপ ইঞ্জিন রানটাইম অন্বেষণ করতে এই টিউটোরিয়ালের বোনাস অংশটি নীচে চালিয়ে যান।
- মডিউল ৭: অ্যাপ ইঞ্জিন পুশ টাস্ক কিউ (যদি আপনি [push] টাস্ক কিউ ব্যবহার করেন তবে প্রয়োজনীয়)
- মডিউল ১ অ্যাপে অ্যাপ ইঞ্জিন
taskqueueপুশ টাস্ক যোগ করে - মডিউল ৮-এ ব্যবহারকারীদের ক্লাউড টাস্কে স্থানান্তরের জন্য প্রস্তুত করে
- মডিউল ১ অ্যাপে অ্যাপ ইঞ্জিন
- মডিউল ৪: ডকারের সাথে ক্লাউড রানে মাইগ্রেট করুন
- ডকারের সাহায্যে ক্লাউড রানে চালানোর জন্য আপনার অ্যাপটি কনটেইনারাইজ করুন
- আপনাকে পাইথন ২-তে থাকার অনুমতি দেয়
- মডিউল ৫: ক্লাউড বিল্ডপ্যাক ব্যবহার করে ক্লাউড রানে মাইগ্রেট করুন
- ক্লাউড বিল্ডপ্যাক ব্যবহার করে ক্লাউড রানে চালানোর জন্য আপনার অ্যাপটি কন্টেইনারাইজ করুন।
- ডকার, কন্টেইনার, অথবা
Dockerfileসম্পর্কে আপনার কিছু জানার দরকার নেই। - আপনার অ্যাপটি ইতিমধ্যেই Python 3 এ স্থানান্তরিত হওয়া প্রয়োজন।
- মডিউল ৩:
- ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে ডেটাস্টোর অ্যাক্সেস আধুনিকীকরণ করুন
- এটি পাইথন 3 অ্যাপ ইঞ্জিন অ্যাপ এবং নন-অ্যাপ ইঞ্জিন অ্যাপের জন্য ব্যবহৃত লাইব্রেরি।
৭. বোনাস: পাইথন ৩-এ মাইগ্রেট করুন
সর্বশেষ অ্যাপ ইঞ্জিন রানটাইম এবং বৈশিষ্ট্যগুলি অ্যাক্সেস করতে, আমরা আপনাকে পাইথন 3 এ মাইগ্রেট করার পরামর্শ দিচ্ছি। আমাদের নমুনা অ্যাপে, ডেটাস্টোরই ছিল একমাত্র বিল্ট-ইন পরিষেবা যা আমরা ব্যবহার করেছি, এবং যেহেতু আমরা ndb থেকে ক্লাউড NDB এ মাইগ্রেট করেছি, তাই আমরা এখন অ্যাপ ইঞ্জিনের পাইথন 3 রানটাইমে পোর্ট করতে পারি।
সংক্ষিপ্ত বিবরণ
যদিও পাইথন ৩-এ পোর্ট করা গুগল ক্লাউড টিউটোরিয়ালের আওতাভুক্ত নয়, কোডল্যাবের এই অংশটি ডেভেলপারদের Python 3 অ্যাপ ইঞ্জিন রানটাইম কীভাবে আলাদা তা সম্পর্কে ধারণা দেয়। পরবর্তী প্রজন্মের রানটাইমের একটি অসাধারণ বৈশিষ্ট্য হল তৃতীয় পক্ষের প্যাকেজগুলিতে অ্যাক্সেস সহজ করা; app.yaml এ বিল্ট-ইন প্যাকেজ নির্দিষ্ট করার প্রয়োজন নেই এবং অ -বিল্ট-ইন লাইব্রেরিগুলি অনুলিপি বা আপলোড করার প্রয়োজন নেই; requirements.txt এ তালিকাভুক্ত হওয়ার পর এগুলি পরোক্ষভাবে ইনস্টল করা হয়।
যেহেতু আমাদের নমুনাটি খুবই মৌলিক এবং ক্লাউড এনডিবি পাইথন 2-3 সামঞ্জস্যপূর্ণ, তাই কোনও অ্যাপ্লিকেশন কোড স্পষ্টভাবে 3.x এ পোর্ট করার প্রয়োজন নেই; অ্যাপটি 2.x এবং 3.x এ অপরিবর্তিতভাবে চলে, যার অর্থ এই ক্ষেত্রে কনফিগারেশনে কেবলমাত্র প্রয়োজনীয় পরিবর্তনগুলি করা হবে:
- Python 3 রেফারেন্সের জন্য
app.yamlসরলীকৃত করুন এবং তৃতীয় পক্ষের লাইব্রেরিগুলি সরিয়ে দিন। -
appengine_config.pyএবংlibফোল্ডারটি মুছে ফেলুন কারণ এগুলির আর প্রয়োজন নেই।
main.py ছাড়াও, requirements.txt এবং templates/index.html ফাইলগুলি অপরিবর্তিত রয়েছে।
app.yaml সরলীকৃত করুন
আগে:
এই নমুনা অ্যাপের একমাত্র আসল পরিবর্তন হল app.yaml উল্লেখযোগ্যভাবে ছোট করা। মনে করিয়ে দেওয়ার জন্য, মডিউল 2 এর উপসংহারে 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 নির্দেশিকাগুলি সবই অবচিত; সমস্ত অ্যাপকে threadsafe বলে ধরে নেওয়া হয় এবং Python 3-এ api_version ব্যবহার করা হয় না। App Engine পরিষেবাগুলিতে আর কোনও অন্তর্নির্মিত তৃতীয়-পক্ষ প্যাকেজ আগে থেকে ইনস্টল করা নেই, তাই libraries অবচিত। এই পরিবর্তনগুলি সম্পর্কে আরও তথ্যের জন্য app.yaml এ পরিবর্তনগুলির ডকুমেন্টেশন পরীক্ষা করুন। ফলস্বরূপ, আপনার app.yaml থেকে তিনটিই মুছে ফেলা উচিত এবং একটি সমর্থিত Python 3 সংস্করণে আপডেট করা উচিত (নীচে দেখুন)।
ঐচ্ছিক: handlers নির্দেশিকা ব্যবহার
এছাড়াও, অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলিতে ট্র্যাফিক পরিচালনাকারী handlers নির্দেশিকাটিও বাতিল করা হয়েছে। যেহেতু পরবর্তী প্রজন্মের রানটাইম ওয়েব ফ্রেমওয়ার্কগুলিকে অ্যাপ রাউটিং পরিচালনা করার প্রত্যাশা করে, তাই সমস্ত "হ্যান্ডলার স্ক্রিপ্ট" " auto " তে পরিবর্তন করতে হবে। উপরে থেকে পরিবর্তনগুলি একত্রিত করে, আপনি এই app.yaml এ পৌঁছান:
runtime: python38
handlers:
- url: /.*
script: auto
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 এর পরিবর্তে Flask ডেভেলপমেন্ট সার্ভার ব্যবহার করার অনুরোধ করা হয়েছে। পোর্ট 8080-এর 0.0.0.0 ইন্টারফেসে চালু করার জন্য ডেভেলপমেন্ট সার্ভার শুরু করার কোডটি আপনার অ্যাপে যোগ করতে হবে main.py এর নীচে এই ছোট অংশটি যোগ করে:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)
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 ফাইলে সমস্ত প্রয়োজনীয় তৃতীয় পক্ষের লাইব্রেরি তালিকাভুক্ত করাই যথেষ্ট।
অ্যাপ্লিকেশন স্থাপন করুন
আপনার অ্যাপটি কাজ করছে কিনা তা নিশ্চিত করার জন্য এটি পুনরায় স্থাপন করুন। আপনি মডিউল 2 নমুনা পাইথন 3 কোডের সাথে আপনার সমাধান কতটা কাছাকাছি তা নিশ্চিত করতে পারেন। পাইথন 2 এর সাথে পার্থক্যগুলি কল্পনা করতে, কোডটিকে এর পাইথন 2 সংস্করণের সাথে তুলনা করুন।
মডিউল ২-এর বোনাস ধাপটি সম্পন্ন করার জন্য অভিনন্দন! পাইথন ৩ রানটাইমের জন্য কনফিগারেশন ফাইল প্রস্তুত করার ডকুমেন্টেশনটি দেখুন। অবশেষে, পরবর্তী পদক্ষেপ এবং পরিষ্কারের জন্য (পূর্ববর্তী) সারাংশ/পরিষ্কার পৃষ্ঠাটি পর্যালোচনা করুন।
আপনার আবেদন প্রস্তুত করা হচ্ছে
যখন আপনার অ্যাপ্লিকেশনটি মাইগ্রেট করার সময় হবে, তখন আপনাকে আপনার main.py এবং অন্যান্য অ্যাপ্লিকেশন ফাইলগুলি 3.x এ পোর্ট করতে হবে, তাই সর্বোত্তম অনুশীলন হল আপনার 2.x অ্যাপ্লিকেশনটিকে যতটা সম্ভব "ফরওয়ার্ড-সামঞ্জস্যপূর্ণ" করার জন্য যথাসাধ্য চেষ্টা করা।
এটি সম্পন্ন করতে আপনাকে সাহায্য করার জন্য প্রচুর অনলাইন সংস্থান রয়েছে, তবে কিছু গুরুত্বপূর্ণ টিপস:
- নিশ্চিত করুন যে সমস্ত অ্যাপ্লিকেশন নির্ভরতা সম্পূর্ণরূপে 3.x-সামঞ্জস্যপূর্ণ
- নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনটি কমপক্ষে 2.6 (বিশেষ করে 2.7) এ চলছে।
- আবেদনপত্রটি সম্পূর্ণ পরীক্ষা স্যুট (এবং সর্বনিম্ন 80% কভারেজ) পাস করেছে কিনা তা নিশ্চিত করুন।
-
six, Future, এবং/অথবা Modernize এর মতো সামঞ্জস্যপূর্ণ লাইব্রেরি ব্যবহার করুন - ২.x বনাম ৩.x এর মধ্যে পার্থক্য সম্পর্কে নিজেকে শিক্ষিত করুন।
- যেকোনো I/O সম্ভবত ইউনিকোড বনাম বাইট স্ট্রিং অসঙ্গতির দিকে পরিচালিত করবে
এই সমস্ত কিছু মাথায় রেখেই নমুনা অ্যাপটি তৈরি করা হয়েছে, তাই অ্যাপটি 2.x এবং 3.x-এ চলে, যাতে আমরা আপনাকে পরবর্তী প্রজন্মের প্ল্যাটফর্ম ব্যবহার করার জন্য কী কী পরিবর্তন করতে হবে তা দেখানোর উপর মনোযোগ দিতে পারি।
৮. অতিরিক্ত সম্পদ
অ্যাপ ইঞ্জিন মাইগ্রেশন মডিউল কোডল্যাব সমস্যা/প্রতিক্রিয়া
এই কোডল্যাবে যদি কোনও সমস্যা খুঁজে পান, তাহলে ফাইল করার আগে অনুগ্রহ করে প্রথমে আপনার সমস্যাটি অনুসন্ধান করুন। নতুন সমস্যা অনুসন্ধান এবং তৈরি করার লিঙ্ক:
মাইগ্রেশন রিসোর্স
মডিউল ১ (START) এবং মডিউল ২ (FINISH) এর জন্য রেপো ফোল্ডারগুলির লিঙ্কগুলি নীচের টেবিলে পাওয়া যাবে। সমস্ত অ্যাপ ইঞ্জিন কোডল্যাব মাইগ্রেশনের জন্য রেপো থেকেও এগুলি অ্যাক্সেস করা যেতে পারে যা আপনি ক্লোন করতে পারেন বা একটি ZIP ফাইল ডাউনলোড করতে পারেন।
কোডল্যাব | পাইথন ২ | পাইথন ৩ |
(না) | ||
মডিউল ২ |
অ্যাপ ইঞ্জিন রিসোর্স
এই নির্দিষ্ট স্থানান্তর সম্পর্কিত অতিরিক্ত সম্পদ নীচে দেওয়া হল:
- পাইথন এনডিবি রেফারেন্স
- (পুরাতন) পাইথন ২.৫ এবং
webappথেকে ২.৭ এবংwebapp2এ স্থানান্তরিত হচ্ছে - পাইথন 3 এবং GAE পরবর্তী প্রজন্মের রানটাইমে স্থানান্তরিত হচ্ছে
- সাধারণ