RkBlog

Hardware, programming and astronomy tutorials and reviews.

Migracja aplikacji na Google App Engine do nowego High Replication Datastore

Co i jak zmienić żeby uruchomić stare aplikacje na nowym datastore zanim stary zostanie wyłączony?

Google jakiś czas temu ogłosiło zmiany na platformie GAE - aplikacje Datastore master/slave zostaną wyłączone 6 lipca 2015. Wszystkie stare aplikacje należy zmigrować do nowego typu aplikacji z High Replication Datastore. Proces migracji jest prosty, choć może nieco różnić się dla każdej aplikacji.

Aktualizacja aplikacji do HRD

Dostępny jest szczegółowy przewodnik migracji. W skrócie musimy utworzyć nową aplikację na Google App Engine wybierając HRD. Następnie wrzucamy na nią kod migrowanej aplikacji. Gdy to się uda wchodzimy do ustawień starej aplikacji i wyszukujemy Migration tool, gdzie możemy wybrać docelową aplikację HRD i rozpocząć proces migracji. Gdy dobiegnie on końca stary adres na appspot.com będzie aliasem do nowej aplikacji HRD.

Rozpoczęcie migracji do HRD

Rozpoczęcie migracji do HRD

W pewnym momencie przełączamy starą aplikację w tryb tylko do odczytu

W pewnym momencie przełączamy starą aplikację w tryb tylko do odczytu

Na końcu potwierdzamy zakończenie migracji co stworzy alias

Na końcu potwierdzamy zakończenie migracji co stworzy alias

Przy wrzucaniu kodu do nowej aplikacji można dokonać innych aktualizacji zalecanych przez Google. Ja miałem dwie proste aplikacje wykorzystujące webapp i Pythona 2.5. Przy przechodzeniu na HRD zyskujemy dostęp do Pythona 2.7 i nowych wersji bibliotek, w tym webapp2. Zmian jest nieco więcej. W moim przypadku zmian było kilka:

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest
Następnie trzeba zabrać się za migrację kodu. Lokalny serwer deweloperski jest oczywiście nieodzowny do testowania i debugowania. W porównaniu do webapp nowa wersja ma prostszy szkielet aplikacji, jak i np. odmienną obsługę szablonów, oto przykład:
# -*- coding: utf-8 -*-
import os

import jinja2
import webapp2

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
    extensions=['jinja2.ext.autoescape'],
    autoescape=True)


class MainPage(webapp2.RequestHandler):
    def get(self):
        template = JINJA_ENVIRONMENT.get_template('templates/main_page.html')
        self.response.write(template.render({}))


app = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

Dla webapp2 dostępny jest tutorial na stronach dokumentacji Google App Engine. Na końcu oczywiście wyłączamy debug... W efekcie migracji możemy cieszyć się z działającej aplikacji działającej na najnowszych komponentach, np. pythonmore.appspot.com ;)

RkBlog

3 May 2015;

Comment article