মডিউল 2: অ্যাপ ইঞ্জিন ndb থেকে Cloud NDB-তে স্থানান্তর করুন

1. ওভারভিউ

কোডল্যাবগুলির এই সিরিজের (স্ব-গতিসম্পন্ন, হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হল Google অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড) বিকাশকারীদের তাদের অ্যাপ্লিকেশানগুলিকে একাধিক মাইগ্রেশনের মাধ্যমে গাইড করে তাদের আধুনিকীকরণে সহায়তা করা৷ সবচেয়ে তাৎপর্যপূর্ণ পদক্ষেপ হল মূল রানটাইম বান্ডিল করা পরিষেবাগুলি থেকে দূরে সরে যাওয়া কারণ পরবর্তী প্রজন্মের রানটাইমগুলি আরও নমনীয়, ব্যবহারকারীদের পরিষেবার বিকল্পগুলির একটি বৃহত্তর বৈচিত্র্য দেয়৷ নতুন প্রজন্মের রানটাইমে চলে যাওয়া আপনাকে Google ক্লাউড পণ্যগুলির সাথে আরও সহজে একীভূত করতে, সমর্থিত পরিষেবাগুলির বিস্তৃত পরিসর ব্যবহার করতে এবং বর্তমান ভাষার প্রকাশগুলিকে সমর্থন করতে সক্ষম করে৷

এই টিউটোরিয়ালটি আপনাকে শেখায় কিভাবে অ্যাপ ইঞ্জিনের অন্তর্নির্মিত ndb (Next Database) ক্লায়েন্ট লাইব্রেরি থেকে Cloud NDB ক্লায়েন্ট লাইব্রেরিতে স্থানান্তর করতে হয়।

আপনি কিভাবে শিখবেন

  • অ্যাপ ইঞ্জিন ndb লাইব্রেরি ব্যবহার করুন (যদি আপনি এটির সাথে অপরিচিত হন)
  • ndb থেকে Cloud NDB-তে স্থানান্তর করুন
  • আরও আপনার অ্যাপকে Python 3-এ স্থানান্তর করুন

আপনি কি প্রয়োজন হবে

সমীক্ষা

আপনি কিভাবে এই কোডল্যাব ব্যবহার করবেন?

শুধুমাত্র এটি মাধ্যমে পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

2. পটভূমি

মডিউল 1-এ, আমরা অ্যাপ ইঞ্জিনের অন্তর্নির্মিত webapp2 থেকে ফ্লাস্কে ওয়েব ফ্রেমওয়ার্ক স্থানান্তরিত করেছি। এই কোডল্যাবে, আমরা অ্যাপ ইঞ্জিনের ndb লাইব্রেরি থেকে Google ক্লাউড এনডিবি -তে স্যুইচ করে অ্যাপ ইঞ্জিনের অন্তর্নির্মিত পরিষেবাগুলি থেকে দূরে সরে যাচ্ছি।

এই স্থানান্তর সম্পূর্ণ করার মাধ্যমে, আপনি তখন করতে পারেন:

  1. Python 3 এবং পরবর্তী-জেন অ্যাপ ইঞ্জিন রানটাইমে স্থানান্তর করুন
  2. ক্লাউড ডেটাস্টোরে স্থানান্তর করুন (অ-অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলির জন্য ক্লায়েন্ট লাইব্রেরি)
  3. আপনার পাইথন 2 (বা 3) অ্যাপটি ধারণ করুন এবং ক্লাউড রানে স্থানান্তর করুন
  4. অ্যাপ ইঞ্জিন (পুশ) টাস্ক সারি ব্যবহার করুন তারপর ক্লাউড টাস্কে স্থানান্তর করুন

কিন্তু, আমরা এখনও সেখানে নেই. পরবর্তী পদক্ষেপগুলি বিবেচনা করার আগে এই কোডল্যাবটি শেষ করুন। এই টিউটোরিয়ালের মাইগ্রেশন এই প্রাথমিক ধাপগুলি বৈশিষ্ট্যযুক্ত:

  1. সেটআপ/প্রিওয়ার্ক
  2. ক্লাউড এনডিবি লাইব্রেরি যোগ করুন
  3. অ্যাপ্লিকেশন ফাইল আপডেট করুন

3. সেটআপ/প্রিওয়ার্ক

টিউটোরিয়ালের মূল অংশ নিয়ে যাওয়ার আগে, আসুন আমাদের প্রজেক্ট সেটআপ করি, কোড পাই, তারপর বেসলাইন অ্যাপটি স্থাপন করি যাতে আমরা জানি যে আমরা কাজের কোড দিয়ে শুরু করেছি।

1. সেটআপ প্রকল্প

আপনি যদি মডিউল 1 কোডল্যাব সম্পূর্ণ করেন, আমরা সেই একই প্রকল্প (এবং কোড) পুনরায় ব্যবহার করার পরামর্শ দিই। বিকল্পভাবে, আপনি একটি একেবারে নতুন প্রকল্প তৈরি করতে পারেন বা অন্য একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করতে পারেন। প্রজেক্টের একটি সক্রিয় বিলিং অ্যাকাউন্ট আছে এবং অ্যাপ ইঞ্জিন চালু আছে তা নিশ্চিত করুন।

2. বেসলাইন নমুনা অ্যাপ পান

পূর্বশর্তগুলির মধ্যে একটি হল একটি কার্যকরী মডিউল 1 নমুনা অ্যাপ। আপনি যদি সেই টিউটোরিয়ালটি সম্পন্ন করেন তবে আপনার সমাধানটি ব্যবহার করুন। আপনি এখন এটি সম্পূর্ণ করতে পারেন (উপরের লিঙ্ক), অথবা আপনি যদি এটি এড়িয়ে যেতে চান, তাহলে মডিউল 1 রেপো (নীচের লিঙ্ক) অনুলিপি করুন।

আপনি আপনার বা আমাদের ব্যবহার করুন না কেন, মডিউল 1 কোড যেখানে আমরা শুরু করব। এই মডিউল 2 কোডল্যাব আপনাকে প্রতিটি ধাপে নিয়ে যায় এবং সম্পূর্ণ হলে, এটি ফিনিশ পয়েন্টে কোডের সাথে সাদৃশ্যপূর্ণ হওয়া উচিত (পাইথন 2 থেকে 3 পর্যন্ত একটি ঐচ্ছিক "বোনাস" পোর্ট সহ):

আপনার স্টার্টিং মডিউল 1 কোড ফোল্ডারে নিম্নলিখিত বিষয়বস্তু থাকা উচিত:

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

আপনি যদি মডিউল 1 টিউটোরিয়ালটি সম্পূর্ণ করেন তবে আপনার কাছে ফ্লাস্ক এবং এর নির্ভরতা সহ একটি lib ফোল্ডারও থাকবে। আপনার যদি lib ফোল্ডার না থাকে, pip install -t lib -r requirements.txt কমান্ড দিয়ে এটি তৈরি করুন যাতে আমরা পরবর্তী ধাপে এই বেসলাইন অ্যাপটি স্থাপন করতে পারি। আপনার যদি Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে, তাহলে Python 3 এর সাথে বিভ্রান্তি এড়াতে আমরা pip পরিবর্তে pip2 ব্যবহার করার পরামর্শ দিই।

3. (পুনরায়) মডিউল 1 অ্যাপ স্থাপন করুন

এখন চালানোর জন্য আপনার অবশিষ্ট প্রিওয়ার্ক পদক্ষেপগুলি:

  1. gcloud কমান্ড-লাইন টুলের সাথে নিজেকে পুনরায় পরিচিত করুন (যদি NEC।)
  2. (পুনরায়) অ্যাপ ইঞ্জিনে মডিউল 1 কোড স্থাপন করুন (যদি NEC।)

একবার আপনি সফলভাবে এই পদক্ষেপগুলি সম্পাদন করেছেন এবং এটি কার্যকরী নিশ্চিত করার পরে, আমরা কনফিগারেশন ফাইলগুলি দিয়ে শুরু করে এই টিউটোরিয়ালটিতে এগিয়ে যাব।

4. কনফিগারেশন ফাইল আপডেট করুন (ক্লাউড এনডিবি লাইব্রেরি যোগ করুন)

অনেক আসল অ্যাপ ইঞ্জিন বিল্ট-ইন পরিষেবাগুলি তাদের নিজস্ব পণ্যগুলিতে প্রস্ফুটিত হয়েছে এবং ডেটাস্টোর তাদের মধ্যে একটি। আজ নন-অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলি ক্লাউড ডেটাস্টোর ব্যবহার করতে পারে৷ দীর্ঘদিনের ndb ব্যবহারকারীদের জন্য, Google ক্লাউড দল ক্লাউড ডেটাস্টোরের সাথে কথা বলার জন্য ক্লাউড এনডিবি ক্লায়েন্ট লাইব্রেরি তৈরি করেছে। এটি পাইথন 2 এবং 3 উভয়ের জন্য উপলব্ধ।

ক্লাউড এনডিবি দিয়ে অ্যাপ ইঞ্জিন ndb প্রতিস্থাপন করার জন্য নিশ্চিতকরণ ফাইলগুলিকে আপডেট করি তারপর আমাদের অ্যাপ্লিকেশনটি সংশোধন করি।

1. requirements.txt আপডেট করুন

মডিউল 1-এ, আমাদের অ্যাপের জন্য একমাত্র বাহ্যিক নির্ভরতা ছিল ফ্লাস্ক। এখন আমরা ক্লাউড এনডিবি যোগ করব। মডিউল 1 এর শেষে আপনার 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 ক্লাউড ক্লায়েন্ট লাইব্রেরি যোগ করার জন্য কিছু প্রয়োজনীয়তা রয়েছে, সবই "বিল্ট-ইন" লাইব্রেরি অন্তর্ভুক্ত করার চারপাশে ঘোরে, 3য়-পক্ষের প্যাকেজগুলি ইতিমধ্যেই Google সার্ভারে উপলব্ধ৷ আপনি তাদের requirements.txt এ তালিকাভুক্ত করবেন না বা pip install দিয়ে কপি করবেন না। শুধুমাত্র প্রয়োজনীয়তা:

  1. app.yaml এ বিল্ট-ইন লাইব্রেরি উল্লেখ করুন
  2. তাদের অনুলিপি করা তৃতীয় পক্ষের লাইব্রেরিতে নির্দেশ করুন যে তারা কাজ করতে পারে ( lib এ)

এখানে মডিউল 1 থেকে শুরু করা app.yaml :

  • আগে:
runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

এখন থার্ড-পার্টি বান্ডিল করা প্যাকেজগুলির একটি জোড়া উল্লেখ করতে app.yaml এ নিম্নলিখিত লাইনগুলি যোগ করুন: একটি নতুন libraries বিভাগে grpcio এবং setuptools :

libraries:
- name: grpcio
  version: 1.0.0
- name: setuptools
  version: 36.6.0

কেন এই অন্তর্নির্মিত লাইব্রেরি ব্যবহার? gRPC হল একটি উন্মুক্ত RPC ফ্রেমওয়ার্ক যা google-cloud-ndb সহ সমস্ত Google ক্লাউড ক্লায়েন্ট লাইব্রেরি দ্বারা ব্যবহৃত হয়। grpcio লাইব্রেরি হল পাইথন 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

3. appengine_config.py আপডেট করুন

pkg_resources টুল, setuptools লাইব্রেরির অংশ, বিল্ট-ইন থার্ড-পার্টি লাইব্রেরিগুলিকে বান্ডিল করা লাইব্রেরিগুলি অ্যাক্সেস করতে ব্যবহার করা হয়। pkg_resources ব্যবহার করতে appengine_config.py আপডেট করুন 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)

5. অ্যাপ্লিকেশন ফাইল আপডেট করুন

কনফিগারেশন ফাইলের আনুষ্ঠানিকতা শেষ হয়ে গেলে, আপনি এখন ndb থেকে Cloud NDB-তে স্থানান্তর করতে পারেন। মাইগ্রেশন সম্পূর্ণ করতে, আমদানি করা লাইব্রেরি আপডেট করুন এবং main.py এ প্রসঙ্গ ব্যবস্থাপনার ব্যবহার যোগ করুন।

1. আমদানি

main.py এ নিম্নলিখিত আমদানি অদলবদল করুন:

  • আগে
from google.appengine.ext import ndb
  • পরে:
from google.cloud import ndb

অ্যাপ ইঞ্জিন লাইব্রেরি থেকে Google ক্লাউড লাইব্রেরিতে পরিবর্তন কখনও কখনও এই উদাহরণের মতোই সূক্ষ্ম। অন্তর্নির্মিত পরিষেবাগুলির জন্য যা সম্পূর্ণ Google ক্লাউড পণ্যে পরিণত হয়েছে, আপনি google.appengine এর পরিবর্তে google.cloud থেকে বৈশিষ্ট্যগুলি আমদানি করবেন৷

2. ডেটাস্টোর অ্যাক্সেস

ক্লাউড এনডিবি লাইব্রেরি ব্যবহার করতে সক্ষম হতে, আপনার অ্যাপটিকে অবশ্যই পাইথন প্রসঙ্গ পরিচালক ব্যবহার করতে হবে। তাদের উদ্দেশ্য হল সংস্থানগুলিতে অ্যাক্সেস "গেট" করা যাতে সেগুলি ব্যবহার করার আগে অবশ্যই অধিগ্রহণ করা উচিত। কনটেক্সট ম্যানেজাররা কম্পিউটার সায়েন্স কন্ট্রোল টেকনিকের উপর ভিত্তি করে যা রিসোর্স অ্যালোকেশন ইজ ইনিশিয়ালাইজেশন (বা RAII) নামে পরিচিত। কনটেক্সট ম্যানেজারগুলি পাইথন ফাইলগুলির সাথে ব্যবহার করা হয় (এগুলি অ্যাক্সেস করার আগে অবশ্যই খুলতে হবে) এবং একটি " গুরুত্বপূর্ণ বিভাগে " কোড চালানোর আগে " স্পিন লক " অবশ্যই অর্জন করতে হবে।

একইভাবে, ক্লাউড এনডিবি-র প্রয়োজন হয় যে কোনও ডেটাস্টোর কমান্ড কার্যকর করার আগে ডেটাস্টোরের সাথে যোগাযোগ করার জন্য আপনাকে একটি ক্লায়েন্টের প্রসঙ্গ অর্জন করতে হবে। প্রথমে, একটি ক্লায়েন্ট তৈরি করুন ( ndb.Client() ) যোগ করে ds_client = ndb.Client() ফ্লাস্ক ইনিশিয়ালাইজেশনের ঠিক পরে main.py তে:

app = Flask(__name__)
ds_client = ndb.Client()

কমান্ড with পাইথন শুধুমাত্র একটি বস্তুর প্রসঙ্গ প্রাপ্ত করার জন্য ব্যবহার করা হয়। ডেটাস্টোর অ্যাক্সেস করার জন্য যেকোন কোড ব্লক বিবৃতি with মোড়ানো।

নীচে ডেটাস্টোরে একটি নতুন সত্তা লেখার জন্য এবং সাম্প্রতিক যুক্ত হওয়া সত্তাগুলি প্রদর্শন করার জন্য মডিউল 1 থেকে একই ফাংশনগুলি রয়েছে:

  • আগে:

এখানে প্রসঙ্গ ব্যবস্থাপনা ছাড়া মূল কোড আছে:

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))

মূল ড্রাইভার অ্যাপ্লিকেশনটি আমাদের মডিউল 1 থেকে যা ছিল তার সাথে একই থাকে কারণ এখানে কোনও 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)

একটি সর্বোত্তম অনুশীলন হল অ্যাপ্লিকেশন কোড এবং ডেটা অ্যাক্সেসের মধ্যে একটি স্পষ্ট পার্থক্য নিশ্চিত করা। এইভাবে, আপনার প্রধান অ্যাপ্লিকেশন কোড পরিবর্তন হয় না যখন অন্তর্নিহিত ডেটা স্টোরেজ প্রক্রিয়া পরিবর্তন করা হয় যেমনটি আমরা এই স্থানান্তরের সাথে করেছি।

6. সারাংশ/পরিষ্কার

অ্যাপ্লিকেশন স্থাপন

gcloud app deploy এর সাথে আপনার অ্যাপ পুনরায় স্থাপন করুন এবং অ্যাপটি কাজ করছে তা নিশ্চিত করুন। আপনার কোড এখন মডিউল 2 রেপোতে যা আছে তার সাথে মেলে।

আপনি যদি পূর্ববর্তী কোডল্যাবগুলির কোনওটি না করে এই সিরিজে ঝাঁপিয়ে পড়েন তবে অ্যাপটি নিজেই পরিবর্তন হবে না; এটি মূল ওয়েব পৃষ্ঠায় সমস্ত পরিদর্শন নিবন্ধন করে ( / ) এবং আপনি একবার সাইটটিতে পর্যাপ্ত বার পরিদর্শন করার পরে এটির মতো দেখায়:

ভিজিটমি অ্যাপ

এই মডিউল 2 কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন। আপনি সবেমাত্র ফিনিশিং লাইন অতিক্রম করেছেন, যেহেতু Datastore যতদূর যায় এই সিরিজের দৃঢ়ভাবে প্রস্তাবিত মাইগ্রেশনগুলির মধ্যে এটিই শেষ।

ঐচ্ছিক: পরিষ্কার করুন

আপনি পরবর্তী মাইগ্রেশন কোডল্যাবে যাওয়ার জন্য প্রস্তুত না হওয়া পর্যন্ত বিল এড়াতে পরিষ্কার করার বিষয়ে কী করবেন? বিদ্যমান বিকাশকারী হিসাবে, আপনি সম্ভবত ইতিমধ্যেই অ্যাপ ইঞ্জিনের মূল্যের তথ্যে আপ-টু-স্পীড করছেন৷

ঐচ্ছিক: অ্যাপ অক্ষম করুন

আপনি যদি পরবর্তী টিউটোরিয়ালে যেতে এখনও প্রস্তুত না হন, তাহলে চার্জ এড়াতে আপনার অ্যাপটি অক্ষম করুন । আপনি যখন পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হন, আপনি এটি পুনরায় সক্ষম করতে পারেন৷ আপনার অ্যাপটি অক্ষম থাকাকালীন, এটি চার্জ করার জন্য কোনও ট্রাফিক পাবে না, তবে আরেকটি জিনিস যা আপনি বিল পেতে পারেন তা হল আপনার ডেটাস্টোর ব্যবহার যদি এটি বিনামূল্যের কোটা অতিক্রম করে, তাই সেই সীমার মধ্যে পড়ার জন্য যথেষ্ট মুছে ফেলুন৷

অন্যদিকে, আপনি যদি মাইগ্রেশন চালিয়ে যেতে না চান এবং সবকিছু সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে আপনি আপনার প্রকল্পটি বন্ধ করতে পারেন।

পরবর্তী পদক্ষেপ

এখান থেকে, আপনার পরবর্তী পদক্ষেপের জন্য নমনীয়তা রয়েছে। এই বিকল্পগুলির যেকোনো একটি বেছে নিন:

  • মডিউল 2 বোনাস: পাইথন 3-এ পোর্টিং এবং পরবর্তী প্রজন্মের অ্যাপ ইঞ্জিন রানটাইম অন্বেষণ করতে এই টিউটোরিয়ালের বোনাস অংশের নিচে চালিয়ে যান।
  • মডিউল 7: অ্যাপ ইঞ্জিন পুশ টাস্ক সারি (আপনি [পুশ] টাস্ক সারি ব্যবহার করলে প্রয়োজনীয়)
    • মডিউল 1 অ্যাপে অ্যাপ ইঞ্জিন taskqueue পুশ টাস্ক যোগ করে
    • মডিউল 8-এ ক্লাউড টাস্কে মাইগ্রেট করার জন্য ব্যবহারকারীদের প্রস্তুত করে
  • মডিউল 4: ডকার দিয়ে ক্লাউড রানে মাইগ্রেট করুন
    • ক্লাউড রান উইথ ডকারে চালানোর জন্য আপনার অ্যাপটি কন্টেইনারাইজ করুন
    • আপনাকে পাইথন 2 এ থাকার অনুমতি দেয়
  • মডিউল 5: ক্লাউড বিল্ডপ্যাক সহ ক্লাউড রানে মাইগ্রেট করুন
    • ক্লাউড বিল্ডপ্যাকগুলির সাথে ক্লাউড রানে চালানোর জন্য আপনার অ্যাপটি কন্টেইনারাইজ করুন
    • ডকার, কন্টেইনার বা Dockerfile সম্পর্কে আপনার কিছু জানার দরকার নেই
    • আপনার অ্যাপটি ইতিমধ্যেই পাইথন 3-এ স্থানান্তরিত করা প্রয়োজন
  • মডিউল 3:
    • ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে ডেটাস্টোর অ্যাক্সেসকে আধুনিক করুন
    • এটি পাইথন 3 অ্যাপ ইঞ্জিন অ্যাপ্লিকেশন এবং নন-অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলির জন্য ব্যবহৃত লাইব্রেরি

7. বোনাস: Python 3-এ মাইগ্রেট করুন

সর্বশেষ অ্যাপ ইঞ্জিন রানটাইম এবং বৈশিষ্ট্যগুলি অ্যাক্সেস করার জন্য, আমরা আপনাকে পাইথন 3-এ স্থানান্তরিত করার পরামর্শ দিই। আমাদের নমুনা অ্যাপে, ডেটাস্টোর ছিল একমাত্র অন্তর্নির্মিত পরিষেবা যা আমরা ব্যবহার করতাম এবং যেহেতু আমরা ndb থেকে ক্লাউড NDB-তে স্থানান্তরিত হয়েছি, আমরা এখন করতে পারি। অ্যাপ ইঞ্জিনের পাইথন 3 রানটাইমে পোর্ট করুন।

ওভারভিউ

পাইথন 3-এ পোর্ট করা Google ক্লাউড টিউটোরিয়ালের সুযোগের মধ্যে না থাকলেও, কোডল্যাবের এই অংশটি ডেভেলপারদের একটি ধারণা দেয় যে পাইথন 3 অ্যাপ ইঞ্জিন রানটাইম কীভাবে আলাদা। পরবর্তী প্রজন্মের রানটাইমের একটি অসামান্য বৈশিষ্ট্য হল তৃতীয় পক্ষের প্যাকেজগুলিতে সরলীকৃত অ্যাক্সেস; app.yaml এ অন্তর্নির্মিত প্যাকেজগুলি নির্দিষ্ট করার কোন প্রয়োজন নেই এবং নন -বিল্ট-ইন লাইব্রেরিগুলি অনুলিপি বা আপলোড করার প্রয়োজন নেই; এগুলি requirements.txt এ তালিকাভুক্ত থেকে নিহিতভাবে ইনস্টল করা হয়েছে

যেহেতু আমাদের নমুনা খুবই মৌলিক এবং ক্লাউড এনডিবি পাইথন 2-3 সামঞ্জস্যপূর্ণ, কোনো অ্যাপ্লিকেশন কোড স্পষ্টভাবে 3.x এ পোর্ট করার প্রয়োজন নেই; অ্যাপটি 2.x এবং 3.x অপরিবর্তিতভাবে চলে, যার অর্থ এই ক্ষেত্রে কনফিগারেশনে শুধুমাত্র প্রয়োজনীয় পরিবর্তনগুলি রয়েছে:

  1. Python 3 রেফারেন্স করতে app.yaml সরলীকরণ করুন এবং তৃতীয় পক্ষের লাইব্রেরিগুলি সরান৷
  2. 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 নির্দেশাবলী সবই বাতিল করা হয়েছে; সমস্ত অ্যাপগুলিকে থ্রেডসেফ বলে মনে করা হয় এবং পাইথন 3-এ api_version ব্যবহার করা হয় না। অ্যাপ ইঞ্জিন পরিষেবাগুলিতে আর বিল্ট-ইন তৃতীয় পক্ষের প্যাকেজগুলি আগে থেকে ইনস্টল করা নেই, তাই 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 পরিবর্তে ফ্লাস্ক ডেভেলপমেন্ট সার্ভার ব্যবহার করার অনুরোধ করে। পোর্ট 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 এ যাওয়ার সময়, বড় পরিবর্তনগুলির একটি সারসংক্ষেপ হল:

  1. অনুলিপি করা তৃতীয় পক্ষের লাইব্রেরির কোনো বান্ডলিং নেই ( requirements.txt এ তালিকাভুক্ত)
  2. কোনো lib ফোল্ডারে কোনো pip install যাবে না, মানে কোনো lib ফোল্ডারের মেয়াদ নেই
  3. app.yaml এ বিল্ট-ইন তৃতীয় পক্ষের লাইব্রেরির কোনো তালিকা নেই
  4. তৃতীয় পক্ষের লাইব্রেরিতে অ্যাপের উল্লেখ করার দরকার নেই, তাই কোনো appengine_config.py ফাইল নেই

requirements.txt .txt-এ সমস্ত প্রয়োজনীয় তৃতীয় পক্ষের লাইব্রেরি তালিকাভুক্ত করাই প্রয়োজন।

অ্যাপ্লিকেশন স্থাপন

এটি কাজ করে তা নিশ্চিত করতে আপনার অ্যাপটি পুনরায় স্থাপন করুন। মডিউল 2 নমুনা পাইথন 3 কোডের সাথে আপনার সমাধান কতটা কাছাকাছি তা আপনি নিশ্চিত করতে পারেন। Python 2 এর সাথে পার্থক্যগুলি কল্পনা করতে, কোডটিকে এর Python 2 সংস্করণের সাথে তুলনা করুন।

মডিউল 2 এ বোনাস ধাপ শেষ করার জন্য অভিনন্দন! Python 3 রানটাইমের জন্য কনফিগারেশন ফাইল প্রস্তুত করার ডকুমেন্টেশন দেখুন। পরিশেষে, পরবর্তী পদক্ষেপ এবং পরিষ্কারের জন্য (আগের) সারাংশ/পরিষ্কার পৃষ্ঠাটি পর্যালোচনা করুন।

আপনার আবেদন প্রস্তুত করা হচ্ছে

আপনার অ্যাপ্লিকেশন স্থানান্তর করার সময় হলে, আপনাকে আপনার main.py এবং অন্যান্য অ্যাপ্লিকেশন ফাইলগুলিকে 3.x এ পোর্ট করতে হবে, তাই একটি সর্বোত্তম অনুশীলন হল আপনার 2.x অ্যাপ্লিকেশনটিকে "ফরোয়ার্ড-সামঞ্জস্যপূর্ণ" হিসাবে তৈরি করার জন্য যথাসাধ্য চেষ্টা করা সম্ভব

এটি সম্পন্ন করতে আপনাকে সাহায্য করার জন্য প্রচুর অনলাইন সংস্থান রয়েছে, তবে কিছু মূল টিপস:

  1. নিশ্চিত করুন যে সমস্ত অ্যাপ্লিকেশন নির্ভরতা সম্পূর্ণরূপে 3.x-সামঞ্জস্যপূর্ণ
  2. নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশন কমপক্ষে 2.6 (বিশেষত 2.7) এ চলে
  3. নিশ্চিত করুন যে আবেদনটি সম্পূর্ণ পরীক্ষা স্যুট পাস করেছে (এবং সর্বনিম্ন 80% কভারেজ)
  4. six , ফিউচার এবং/অথবা আধুনিকীকরণের মতো সামঞ্জস্যপূর্ণ লাইব্রেরি ব্যবহার করুন
  5. কী পিছনের দিকে-বেমানান 2.x বনাম 3.x পার্থক্য সম্পর্কে নিজেকে শিক্ষিত করুন
  6. যেকোন I/O সম্ভবত ইউনিকোড বনাম বাইট স্ট্রিং অসামঞ্জস্যতার দিকে নিয়ে যাবে

নমুনা অ্যাপটি এই সমস্ত কিছু মাথায় রেখে ডিজাইন করা হয়েছে, তাই কেন অ্যাপটি বাক্সের বাইরে 2.x এবং 3.x এ চলে যাতে আমরা আপনাকে দেখানোর উপর ফোকাস করতে পারি পরবর্তী-জেন প্ল্যাটফর্মটি ব্যবহার করার জন্য কী পরিবর্তন করতে হবে। .

8. অতিরিক্ত সম্পদ

অ্যাপ ইঞ্জিন মাইগ্রেশন মডিউল কোডল্যাব সমস্যা/প্রতিক্রিয়া

আপনি যদি এই কোডল্যাবের সাথে কোনো সমস্যা খুঁজে পান, অনুগ্রহ করে ফাইল করার আগে প্রথমে আপনার সমস্যাটি অনুসন্ধান করুন। অনুসন্ধান এবং নতুন সমস্যা তৈরি করার লিঙ্ক:

মাইগ্রেশন সম্পদ

মডিউল 1 (স্টার্ট) এবং মডিউল 2 (ফিনিশ) এর জন্য রেপো ফোল্ডারগুলির লিঙ্কগুলি নীচের টেবিলে পাওয়া যাবে। এগুলি সমস্ত অ্যাপ ইঞ্জিন কোডল্যাব মাইগ্রেশনের জন্য রেপো থেকে অ্যাক্সেস করা যেতে পারে যা আপনি একটি জিপ ফাইল ক্লোন বা ডাউনলোড করতে পারেন।

কোডল্যাব

পাইথন 2

পাইথন 3

মডিউল 1

কোড

(n/a)

মডিউল 2

কোড

কোড

অ্যাপ ইঞ্জিন সম্পদ

নীচে এই নির্দিষ্ট মাইগ্রেশন সম্পর্কিত অতিরিক্ত সংস্থান রয়েছে: