首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

新浪 SAE 部署 Django 博客完整實戰:從賬號註冊到上線訪問的避坑指南

     編輯:MySQL 綜合教學

新浪 SAE 部署 Django 博客完整實戰:從賬號註冊到上線訪問的避坑指南

SAE(Sina App Engine)作為早期國內 PaaS 代表,雖已停止新用戶註冊,但其部署流程對理解雲原生應用遷移仍有參考價值。本文記錄 Django 1.4 版本在 SAE Python 2.7 環境下的完整部署步驟,涵蓋代碼調整、配置文件修改、數據庫同步、靜態文件處理等關鍵環節。

前置準備

  • 註冊新浪微博賬號並開通 SAE 服務(歷史用戶)。
  • 安裝 TortoiseSVN 客戶端(SAE 代碼倉庫基於 SVN)。
  • 本地 Django 項目已跑通,版本 ≤ 1.4(SAE 最高支援 1.4)。

步驟一:創建應用與版本

  1. 登錄 SAE 控制台 →「創建新應用」→ 選擇「Python 2.7」運行環境 → 填寫二級域名(如 lcnet)。
  2. 應用創建成功後,進入「代碼管理」→「創建版本」,版本號填 1。
  3. 獲取 SVN 倉庫地址:https://svn.sinaapp.com/lcnet。

步驟二:本地代碼結構調整

检出 SVN 版本 1 到本地(如 E:\svn\lcnet\1),初始僅含 config.yaml、index.wsgi。需調整為:

1/
├── config.yaml
├── index.wsgi
├── site-packages/          # 新建,放入 Django 1.4 包
│   └── django/
│       └── contrib/admin/static/  → 移至 1/static/
├── lcnet_blog/             # 你的 Django 項目目錄
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py
│   └── ...

步驟三:核心配置文件修改

1. config.yaml

name: lcnet
version: 1
libraries:
- name: "django"
  version: "1.4"   # SAE 內置版本,若自帶請刪除此段
handlers:
- url: /static
  static_dir: static
- url: /media
  static_dir: media

2. index.wsgi(入口文件)

import os, sys
root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(root, 'site-packages'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lcnet_blog.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

3. lcnet_blog/wsgi.py(同步修改)

import os, sys
from django.core.wsgi import get_wsgi_application
root = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(root, '..', 'site-packages'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lcnet_blog.settings")
application = get_wsgi_application()

4. lcnet_blog/urls.py(靜態文件服務)

from django.conf.urls import include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('blog.urls')),
]

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

5. lcnet_blog/settings.py(關鍵:區分本地/SAE 數據庫配置)

DEBUG = True
TEMPLATE_DEBUG = False
ALLOWED_HOSTS = ['.sinaapp.com']

# 判斷是否運行在 SAE 環境
import os
debug = not os.environ.get("APP_NAME", "")

if debug:  # 本地開發
    MYSQL_DB = 'lcnet'
    MYSQL_USER = 'root'
    MYSQL_PASS = 'root'
    MYSQL_HOST_M = '127.0.0.1'
    MYSQL_HOST_S = '127.0.0.1'
    MYSQL_PORT = '3306'
else:      # SAE 線上環境
    import sae.const
    MYSQL_DB = sae.const.MYSQL_DB
    MYSQL_USER = sae.const.MYSQL_USER
    MYSQL_PASS = sae.const.MYSQL_PASS
    MYSQL_HOST_M = sae.const.MYSQL_HOST
    MYSQL_HOST_S = sae.const.MYSQL_HOST_S
    MYSQL_PORT = sae.const.MYSQL_PORT

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': MYSQL_DB,
        'USER': MYSQL_USER,
        'PASSWORD': MYSQL_PASS,
        'HOST': MYSQL_HOST_M,
        'PORT': MYSQL_PORT,
    }
}

步驟四:數據庫初始化(兩種方案)

  1. 方案一:本地遷移導出 SQL 再導入 SAE(推薦,避免 SAE 環境依賴問題)
    • 本地執行 python manage.py migrate 生成表結構。
    • 使用 Navicat/MySQL Workbench 導出 lcnet.sql(僅結構+初始數據)。
    • SAE 控制台 →「MySQL 管理」→ 登錄 phpMyAdmin → 導入 SQL 文件。
  2. 方案二:本地模擬 SAE 環境直接 migrate
    • 安裝 sae-python-dev 模擬 sae.const。
    • 配置環境變量 APP_NAME、MYSQL_* 等。
    • 直接在本地執行 python manage.py migrate,SAE 會自動同步到線上(需開通同步功能)。

步驟五:SVN 提交與上線驗證

  1. 右鍵版本目錄 1 → SVN Commit → 輸入日誌 → 確定(Django 包較大,上傳較慢,耐心等待)。
  2. 提交成功後,訪問 https://lcnet.sinaapp.com 驗證。
  3. 若報 500 錯誤,查看 SAE 控制台「日志中心」→「應用日志」排查。

常見坑點總結

現象原因解決
ImportError: No module named djangosite-packages 路徑未加入 sys.path檢查 index.wsgi、wsgi.py 中 sys.path.insert 順序
Admin 後台樣式缺失static 文件未正確收集/映射config.yaml 配置 /static → static_dir;確保 admin static 在 static/admin/
數據庫連接失敗settings.py 環境判斷邏輯錯誤打印 sae.const 變量核對;本地強制 debug=True 測試
SVN 提交卡住/失敗單文件過大/網絡波動分批提交;刪除 .pyc、.git 等無用文件;多重試

雖然 SAE 已成歷史,但「配置與代碼分離、環境變量驅動配置、靜態文件獨立服務、數據庫遷移腳本化」等最佳實踐,在 Kubernetes、Serverless 時代依然通用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved