相關工具
代碼部署
SAE Python使用SVN作爲部署工具。使用SVN部署代碼到SAE需要遵循以下規則:
SVN根目錄下只允許存在以正整數命名的目錄,不允許有文件存在, 這些目錄爲應用的版本目錄,每個版本目錄下才可以放應用對應版本的代碼。
以應用longtalk爲例,這個應用有6個版本:
jaime@westeros:~/longtalk$ ls
1 2 3 4 5 6
jaime@westeros:~/longtalk/1$ ls
index.wsgi myapp.py
SVN限制:
- 文件名或目錄名不允許含有以下字符:”,*,?,<,>,|,另外文件或文件名的開始與結束也不允許有空格。
- 上傳單個文件大小不超過20M
- 單個目錄下的文 件個數不能超過2000個
- 每個應用代碼總大小不超過100M
- 單個版本代碼總大小不超過50M
Warning
不要使用svn cp,mv,目前還不支持這兩個操作。
本地開發環境
本地開發環境僅爲應用開發便利之用,對sae python環境的模擬並不完整。
安裝
直接使用 pip 或者 easy_install 安裝 sae-python-dev 包即可。
或者可以選擇從github下載源碼安裝。
$ git clone http://github.com/saepython/saepythondevguide.git
$ cd saepythondevguide/dev_server
$ python setup.py install
基本使用
進入應用的本地開發目錄,也就是index.wsgi和config.yaml所在的目錄。運行如下的命令啓動測試server:
$ dev_server.py
MySQL config not found: app.py
Start development server on http://localhost:8080/
訪問 http://localhost:8080 端口就可以訪問你的應用了。
使用MySQL服務
首先配置好MySQL本地開發server。然後使用 –mysql 參數運行dev_server.py。
$ dev_server.py --mysql=user:password@host:port
現在你可以在應用代碼中像在SAE線上環境一樣使用MySQL服務了。 dev_server.py默認使用名爲 app_應用名 的數據庫。
使用storage服務
使用 –storage-path 參數運行dev_server.py。
$ dev_server.py --storage-path=/path/to/local/storage/data
本地的storage服務使用以下的目錄結構來模擬線上的storage。
storage-path/
domain1/
key1
key2
domain2/
domain3/
–storage-path配置的路徑下每個子文件夾會映射爲storage中的一個domain, 而每個子文件夾下的文件映射爲domain下的一個key,其內容爲對應key的數據。
Note
爲方便調試,dev_server自帶的sae.storage在某個domain不存在的情況下會自動創建該domain。 線上環境中的domain需要在sae後臺面板中手動創建。
使用pylibmc
dev_server自帶了一個dummy pylibmc,所以無須安裝pylibmc就可以直接使用memcache服務了。 該模塊將所有的數據存貯在內存中,dev_server.py進程結束時,所有的數據都會丟失。
saecloud
saecloud是一個簡單的命令行部署工具。它分離了代碼部署和代碼託管,使你可以選擇習慣使用的vcs工具,同時還能夠快速部署本地app目錄到SAE服務器上。
部署代碼
進入應用目錄(也就是config.yaml和index.wsgi所在的目錄)。
$ cat config.yaml
name: memorystone
version: 2
$ saecloud deploy
saecloud從config.yaml文件獲得信息,判斷將要把代碼部署到哪個應用的哪個版本。上面的命令會將應用部署到memorystone的版本2上。 saecloud deploy命令接受一個可選參數: app代碼所在路徑,默認爲當前目錄’.’。
Note
- 刪除應用版本目前仍然只能在前端管理界面中操作。
- 如果代碼量較大,則上傳時間較慢,請耐心等待
- 不推薦混合使用saecloud deploy和svn,雖然saecloud deploy部署之前會自動更新代碼,但是如果有代碼衝突則會導致本地狀態不一致。解決辦法爲刪除本地cache目錄: rm -rf ~/.saecloud
導出應用代碼
導出memorystone應用版本2到本地目錄:
$ saecloud export memorystone 2 --username [email protected] --password barxxx
Exporting to memorystone
第一個參數爲應用名字,第二個參數爲版本,可選,默認爲版本1。 第一次使用時,請指定你的代碼訪問帳號信息:username 安全郵箱, password。之後的命令不用在輸入此信息。
Note
deploy 和 export 命令需要用到svn,請先安裝svn命令行工具。 windows用戶可以在這裏下載:http://sourceforge.net/projects/win32svn/
上傳文件到storage
對於無法在storage管理頁面上傳的大文件,可以使用saecloud提供的命令行工具來上傳。
saecloud upload-data app-name domain file [file ...]
處理依賴關係
在應用目錄中執行下面的命令安裝依賴的包。
saecloud install package [package ... ]
該命令會安裝依賴包到該目錄下名爲 site-packages 的目錄裏。如果文件比較多的話,推薦壓縮該目錄。
cd site-packages/
zip -r ../site-packages.zip .
修改index.wsgi文件,在導入其它模塊之前,將 site-packages 目錄或者 site-packages.zip 添加到module的搜索路徑中。
import os
import sys
root = os.path.dirname(__file__)
# 兩者取其一
sys.path.insert(0, os.path.join(root, 'site-packages'))
sys.path.insert(0, os.path.join(root, 'site-packages.zip'))
這樣就可以在應用中使用這些依賴包了。
Tip
安裝指定版本的package:saecloud install package==version
可用插件
SAE Python Shell
SAE Python Shell是一個wsgi中間件,提供了一個在線的interactive shell,便於在線調 試app,查看系統信息等。(由 shellpy 修改而來)。
- class sae.ext.shell.ShellMiddleware(app, password=None)
-
app: 你的應用callable
password: 可選,登錄shell時需要輸入的口令,用於保護shell不被非法訪問。
使用步驟:
-
該插件需要使用 memcache 服務,請事先開啓。
-
修改index.wsgi,啓用shell插件,示例如下:
import sae from sae.ext.shell import ShellMiddleware def app(environ, start_response): status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return ["Hello, world!"] application = sae.create_wsgi_app(ShellMiddleware(app))
-
訪問地址 https://<your-app-name>.sinaapp.com/_sae/shell ,根據提示輸入你設置的口令