最近研究了下Django,寫了個(gè)小應(yīng)用,部署到SAE的過程中發(fā)現(xiàn)有不少坑,網(wǎng)上的介紹要么已經(jīng)過時(shí),要么不夠精煉,這里簡單做下記錄。
按照正常步驟在SAE建立一個(gè)新的Python應(yīng)用,通過SVN導(dǎo)出到本地。
創(chuàng)建配置文件config.yaml
name: reading
version: 1
libraries:
- name: "django"
version: "1.8.3"
創(chuàng)建文件index.wsgi
import sae
from app_name import wsgi
application = sae.create_wsgi_app(wsgi.application)
將以上兩個(gè)文件通過SVN提交以后,就能在SAE應(yīng)用的首頁看到Django的歡迎頁了,萬里長征成功邁出第一步。
接下來將本地調(diào)試好的程序拷貝到config文件同級目錄,并上傳至SVN。為了讓本地的Django應(yīng)用在SAE上完美運(yùn)行,還需要再做兩件事情。
設(shè)置后臺靜態(tài)目錄
在SAE打開admin后臺時(shí),樣式完全亂掉,那是因?yàn)闆]有找到靜態(tài)文件。只需簡單兩步就能解決這個(gè)問題:
第一步:修改settings.py,設(shè)置STATIC_ROOT='static/'
第二步: 運(yùn)行python manage.py collectstatic,把后臺的靜態(tài)文件同步到工程目錄下的static文件夾,然后再通過SVN上傳到SAE。
同步MySQL
SAE的MySQL服務(wù)器不支持遠(yuǎn)程連接的,同時(shí)也不能在SAE上執(zhí)行syncdb命令,因此需要在本地搭建一個(gè)數(shù)據(jù)庫,再通過SQL來進(jìn)行同步。MySQL的搭建比較簡單,參見http://www.itdecent.cn/p/52f18a37f1e9。
為了保證同一套代碼在本地及SAE上都能正常運(yùn)行,需要修改settings.py里的數(shù)據(jù)庫設(shè)置。
if 'SERVER_SOFTWARE' in os.environ:
print "from sae"
from sae.const import (
MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB
)
else:
print "from locale"
MYSQL_HOST = ''
MYSQL_PORT = ''
MYSQL_USER = 'root'
MYSQL_PASS = 'password'
MYSQL_DB = 'db_name'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': MYSQL_DB,
'USER': MYSQL_USER,
'PASSWORD': MYSQL_PASS,
'HOST': MYSQL_HOST,
'PORT': MYSQL_PORT,
}
}
最后,我們可以通過phpMyAdmin來進(jìn)行數(shù)據(jù)的導(dǎo)入導(dǎo)出,這里要特別注意,不能使用WorkBench,WorkBench的dump文件在SAE里不能正常執(zhí)行。
本地搭建SAE環(huán)境
為了減少后期部署調(diào)試的工作量,應(yīng)盡量保持本地開發(fā)環(huán)境與SAE的一致性。SAE提供了相關(guān)的工具來幫助我們搭建本地開發(fā)環(huán)境。
$ git clone https://github.com/sinacloud/sae-python-dev-guide.git
$ cd sae-python-dev-guide/dev_server
$ python setup.py install
安裝完成后,通過以下命令啟動SAE版Django服務(wù):
$ dev_server.py
瀏覽器里輸入http://localhost:8080 ,就可以訪問到Django應(yīng)用的首頁。