11 เมษายน 2555

เขียน Python webapp ด้วย Django+Google App Engine+Cloud SQL - part2 deploy

series content :


django settings.py  ติดต่อฐานข้อมูล Cloud SQL


DATABASES = {
   'default': {
       'ENGINE': 'google.appengine.ext.django.backends.rdbms',
       'INSTANCE': 'project-id:instance1',
       'NAME': 'my_database_name',
   }
}

ตั้งค่า INSTANCE และชื่อฐานข้อมูลตามที่สร้างไว้ใน https://code.google.com/apis/console


ตอนนี้เราอยากทดลองติดต่อฐานข้อมูล Cloud ให้ได้ก่อน โดยยังไม่ต้องเขียน models เอง วิธีง่ายสุดเปิดใช้ django.contrib.admin กับ auth (ระบบ login) ที่มากับ django นี่ล่ะ
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

Environment Variables - PYTHONPATH


*ENGINE : 'google.appengine.ext.django.backends.rdbms' นี้อยู่ใน lib ของ google_appengine\lib\django_1_3 ซึ่งใน windows เราต้อง set PYTHONPATH ไว้ก่อนไม่งั้นตอนรัน manage.py จะหา lib ไม่เจอ

Start > Computer >  Properties  (Win+Break)
> Advanced system settings > Advanced tab > Environment Variables.. 

ใน System Variables เลือก  PYTHONPATH click Edit..



ใส่ path ของ sdk เข้าไป เช่น C:\Program files\Google\google_appengine;C:\Program files\Google\google_appengine\lib\django_1_3 ถ้าไม่มี PYTHONPATH กด New... ใส่ค่าเข้าไปเลย

OAuth2 Authentication - syncdb


แล้วจะใช้คำสั่ง manage.py syncdb เพื่อสร้างฐานข้อมูล

ตอนนี้เราสั่งสร้างฐานข้อมูลใน Cloud SQL จากเครื่อง developer จึงต้องมีการ Login ก่อน (Authentication on the Python Development Web Server)

manage.py require oauth2 authentication
พอเราสั่ง syncdb หรือคำสั่งอื่นที่ติดต่อ database เช่น sql myapp, dbshell ระบบจะเปิดหน้าเว็บให้เรา login ด้วย Google Account ที่ใช้สมัคร API
กดอนุญาติ แล้ว appengine จะสร้างเก็บ OAuth2 token ไว้ในเครื่องเรา
%USERPROFILE%\.googlesql_oauth2.dat
หลังจาก Authentication ผ่านแล้วจะสามารถ syncdb สร้างฐานข้อมูลได้ซะที..

กลับมาดูที่หน้า API Console เปิดดูฐานข้อมูลที่เพิ่งสร้าง (ในตัวอย่าง database ชื่อ my_django_app)
SQL Promt: SHOW TABLES
อีกวิธีคือใช้ manage.py dbshell จะสามารถรันคำสั่ง SQL ที่่เครื่องเราได้เหมือนกัน..

แก้ไฟล์ urls.py สำหรับเข้าหน้า admin (https://docs.djangoproject.com/en/1.3/intro/tutorial02/)
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'myapp.views.home', name='home'),
    # url(r'^myapp/', include('myapp.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)

Into the Cloud


*note: ก่อนจะ deploy
ใน app.yaml  ต้องตั้งชื่อ application: myapp ตามที่สร้างไว้ใน https://appengine.google.com/
ไฟล์ settings.py แก้  ROOT_URLCONF ไม่ต้องมี namespace (GAE ใช้ build in package)

ROOT_URLCONF = 'urls' #'django-cloudsql.urls'


ทดลองรัน project ในเครื่อง localhost:8080/ ถ้าไม่มีปัญหาก็ใช้ launcher กด deploy หรือใช้คำสั่ง
appcfg.py update myapp

สุดท้าย project นี้ก็ขึ้นไปอยู่บน cloud แล้ว..  http://django-cloudsql.appspot.com/admin/

เป็นอันว่า deploy Django ใน App Engine ใช้งานฐานข้อมูล Cloud SQL ได้สำเร็จ

หลังสงกรานต์จะกลับมาทดลองสร้าง app ต่อ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น