sae-python相關工具

相關工具

代碼部署

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進程結束時,所有的數據都會丟失。

使用kvdb

kvdb默認數據存在內存中,dev_server.py進程結束時,數據會全部丟失,如果需要保存數據, 請使用如下命令行啓動dev_server.py。

$ dev_server.py --kvdb-file=/path/to/kvdb/local/file

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

  1. 刪除應用版本目前仍然只能在前端管理界面中操作。
  2. 如果代碼量較大,則上傳時間較慢,請耐心等待
  3. 不推薦混合使用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(apppassword=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 ,根據提示輸入你設置的口令


    http://python.sinaapp.com/doc/tools.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章