2014年1月28日 星期二

Google APP Engine開發簡介

Google APP Engine簡介
Google App Engine(GAE) 讓使用者可以在Google的基礎架構之上執行網路應用程式。在這個基礎建設之上,可以很容易的建立與維護,以及當流量與儲存需求增加時可以容易擴增規模。在Google APP Engine 的環境中,使用者不需要維護伺服器,只需要將網路應用程式上傳,然後其他的使用者就可以使用該應用程式所提供的服務。對於該應用程式,你可以使用自己的網址 (例如http://www.example.com/) ,或是使用 appspot.com領域之下的免費網址。該網路應用程式可以公開讓所有的人使用,或是限制只有組織內的成員才可以存取。Google App Engine 支援以數種常用之程式語言所開發的app,例如Java, Python, PHP,或GO等。
在GAE上佈署APP並不需要費用,也沒有經常性的費用,而是依據APP所使用的頻寬與記憶體,以GB為單位計費。APP的發佈者可以設定資源的最大使用量,使得APP所消費的費用控制在預算之內。App Engine上的APP沒有初始費用,所有的應用程式可以免費使用1GB的儲存空間,足夠的CPU時間,以及可以支援一個月5百萬次的網頁瀏覽數的足夠頻寬。使用者一旦開通計費機制,則免費的額度也會增加,而且只需支付超過免費額度的部分。
Google有一套完整的幾費機制,有興趣者可以參考Google APP Engine網站的說明。

Google APP Engine使用說明

1. 進入GAE首頁
首先進入Google APP Engine首頁,https://appengine.google.com/‎。若是你尚未有Google APP Engine的帳戶,則第一次使用需先申請帳號

圖1 Google APP Engine首頁
2. 申請APP帳號的程序
參考圖2的範例,勾選 I accept these terms,然後點選Submit就可以完成註冊。

圖2 申請帳號時的條款
3. APP資訊看板
Google提供10個免費的APP應用程式,建立APP專案會列在資訊看板中,在資訊看板中會顯示每一個APP專案的名稱,標題,儲存架構,以及狀態等。

4. 建立新的APP
點選Create Application可以進入建立新APP的畫面。在新建APP時需要輸入下列資料:
APP識別子(Application Identifier)
APP識別子基本是需要是一個唯一的名稱,其中不可以使用Google帳戶名稱,或是某些Google的商標等。

APP標題(Application Title)
當使用者存取這個APP時會顯示的名稱。

認證選項(Authentication Options):
對於使用佈署在Google APP Engine平台上的APP,Google提供三種認證使用者的方法:
1. 所有具有Google帳戶的使用者都可以存取(內定)
2. 限定某一Google App領域的使用者才可以存取
3. 開放給所有具有OpenIG的使用者存取

Google APP Engine提供AppCfg工具,讓使用者可以上傳與規劃APP的程式碼與內容,管理資料索引與下載記錄檔。AppCfg具有下列版本的SDK:
Python Runtime - appcfg.py.
Java Runtime - appcfg.
至於 PHP的 runtime則尚處於實驗階段

就架設網站來說,PHP大概是最多人使用的,所以就由PHP下手。
PHP SDK的下載點
https://developers.google.com/appengine/docs/php/gettingstarted/installing
這個 SDK 包含可以讓你在自己的電腦上,測試所開發之PHP程式的網站伺服器,以及完成開發後要上傳所開發的應用程式到APP Engine時所需要的軟體,下列為需要安裝的軟體套件:
Python 2.7,下載點: http://www.python.org/download/
App Engine PHP SDK,下載點: http://googleappengine.googlecode.com/files/GoogleAppEngine-1.8.9.msi

因為開發伺服器是一個Python伺服器,所以使用App Engine PHP SDK需要安裝Python 2.7。此 PHP SDK PHP 5.4 runtime包含所需的擴增資料的二進位檔, 因此若只是基於開發之目的,則不需要另外PHP套件,只需要Python就夠了。
將此SDK下載之後,依據軟體安裝說明,安裝此SDK。
大多數的PHP使用的資料庫為MySQL,App Engine SDK並沒有包含這個資料庫,則需要自行下載使用。MySQL有數個不同的版本,下載Community Server"版本就足以使用。http://dev.mysql.com/downloads/mysql/
在安裝SDK之前要先安裝Python,完成後即可以繼續'安裝SDK。此PHP SDK包含在將所開發的APP Engine應用程式上架到GAE之前,在本地端進行開發與測試時所需要的發展環境。

第一個範例

所有程式開發的第一個範例都是Hello, World,因此也不免俗的以這個範例開場。首先創建一個用來放置所有與此專案相關的目錄,並將之稱為helloworld,在這個目錄內先建立一個新的程式,並且命名為helloworld.php,在這個檔案內輸入下列內容:

<?php
  echo 'Hello, World!';

每一個AGE的應用程式都需要一個稱為app.yaml的規劃檔,在這個規劃檔中,除了其他事項外,也說明了處理腳本(handler scripts)應該用於哪些個URL。這個app.yaml檔案一樣位於helloworld目錄內,並輸入下列內容:

application: helloworld
version: 1
runtime: php
api_version: 1

handlers:
- url: /.*
  script: helloworld.php

在這個範例的規劃檔中,說明了下列資訊:
這個應用程式的識別子(identifier)為helloworld,在AGE的每一個新的應用程式都有一個唯一的識別子,在下一個步驟中,當註冊此APP時需要指定識別子。不過在開發階段倒是無所謂,就先使用這個helloworld即可
第二行的version: 1,說明目前的版本。當在上傳到AGE時,你有變動版本名稱,則AGE會保留舊有的版本,以便有需要時可以使用AGE的管理介面回復到先前的版本
runtime: php表示這個應用程式使用PHP執行環境
api_version: 1表示目前的API版本為1
handlers表示符合下列正規表示法(handlers:)的url請求,都是由helloworld.php腳本程式處理

實際執行:
測試環境
OS : Windows 8.1
Python 2.7.6
Google AppEngine SDK release : 1.8.9
日期:1/26/2014
Python內定安裝在 C:\Python27\
Google AppEngine SDK內定安裝在C:\Program Files (x86)\Google\google_appengine
Windows 8.1是x86 64位元版本,不過windows版的SDK是32位元版,所以在下載時要留意版本

A. 開啟 Google App EngineLauncher


B. 新增一個專案 File->Create New Application

參數:
Application name : APP的名稱,可以自由設定,但是最好與GAE上的app識別子一致,在此為htlintc03
 Parent Diectory :此專案的目錄,本例子為桌面
Runtime :執行環境選擇PHP
Port :在本地端測試時的通訊埠號,可以自由指定,直接使用系統給定的值 8081
Admin Port:在本地端測試時的管理通訊埠號,可以自由指定,直接使用系統給定的值8001

C. 建立一個新的應用程式專案,並且在桌面上新增一個資料夾,內部有三個檔案,分別為php檔,yaml設定檔,以及icon檔


此main.php檔為一個簡單的程式會在螢幕上印出hello world字樣,程式內容如下:

<?php
    echo 'Hello world!';

而app.yaml為設定檔,內容如下:

application: htlintc03
version: 1
runtime: php
api_version: 1
threadsafe: yes

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: .*
  script: main.php

測試APP:
點選該APP (反白)
點選run

觀看結果
若是Stop選項正常顯示,而Run選項無效,且Browse選項顯示正常,則點選 Browse

在內定的瀏覽器(此範例為Google Chrome)會帶出結果,http://localhost:8081/,其中8081為剛剛系統內定的通訊埠號

至此大功告成,一個可以發布到GAE的APP開發完成。

接下來在GAE中新增一個APP。

點選Create Application


Application Identifier:APP識別子,必須是網路上唯一的,本例子為htlintc03
Application Title:應用程式的表頭標題
Authentication Options (Advanced): 認證的選項,可以是
Open to all Google Accounts users (default):Google帳戶使用者(內定)
Restricted to the following Google Apps domain:某一限定領域的用戶
(Experimental) Open to all users with an OpenID Provider:有OpenID的用戶

完成後回到管理畫面,可以看到新增一個htlintc03 APP,狀態(Status)為None Deployed(尚未佈署)

上傳在Google App EngineLauncher建立的新專案htlintc03到GAE
點選Deploy
輸入Google 帳號與密碼

經過一番的程序

回到GAE的管理畫面,Status變成Running,佈署成功

在瀏覽器中輸入此APP的網址 http://htlintc03.appspot.com,可以看到結果,大功告成

問題排除
在開發過程中,於Google App EngineLauncher中Run APP時一直出現UnicodeDecodeError的錯誤,導致無法進行測試。這個問題主要是出自unicode、utf-8和ASCII之間的轉碼問題,但是不知道如何下手修改。在網路上找到一篇文章提到這個問題的解決方法,將Python目錄的Lib目錄內的mimetypes.py檔案中做修正
將所有的 except UnicodeEncodeError:
換成 except UnicodeError:
在Python 2.7.6中,有兩個地方需要修改,在經過修改後果然成功。

沒有留言: