Python¶
Simple Hosting 的 Python 主機能讓您輕鬆又快速的佈署您的 Python 應用程式。
準備工作¶
熟悉 Python 程式與 WSGI
您的程式必須設定 WSGI 進入點
您必須熟悉 Git
支援的版本¶
當您在建立 Python 主機時,您可以選擇兩種版本:
2.7 (可切換到 3.2)
3.6
如果您選擇 Python 2.7 主機,您可以切換 Python 的版本,切換方法請參考下方說明。
基本功能¶
您的 Python 程式必須包含一個名為 wsgi.py 的檔,內容包含了應用程式進入點,您可以參考此文件: http://www.python.org/dev/peps/pep-0333/#the-application-framework-side
網域名稱¶
在主機建立時已經預先連結了一個測試用的域名。您可以連結其他域名或子域名。全部都會連接到同一份程式碼。
範例¶
目錄結構
.
└── wsgi.py
wsgi.py:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')])
return ['<!DOCTYPE html><html><meta charset="utf-8"><title>It works',
'</title><h1>It works!</h1>']
應用程式相依套件¶
您的應用程式相依套件將會使用 pip
進行安裝,您必須將相依套件寫入 requirements.txt
內。
若要自動安裝相依套件,您必須使用 Git。
當您在本機開發應用程式時,您會使用 pip install
來安裝函式庫。完成後,您要將它佈署到線上環境,請在本機執行下列指令列出所有相關套件:
$ pip freeze > requirements.txt
這個指令會將您所有安裝的模組或是函式庫都列在 requirements.txt
這個檔案內。您必須使用 Git 推送您的程式碼與此檔案到主機上。當您使用 SSH 執行佈署指令時,就會自動安裝相依套件。
更多資訊,請參考:
http://www.pip-installer.org/en/latest/cookbook.html#requirements-files
關於更多使用 git+ssh 佈署您程式碼的說明,請參閱我們的 Git 文件。
選擇 Python 版本¶
備註
此章節僅適用於 Python 2.7 / 3.2 的主機。
您可以在我們提供的版本中指定您要使用的版本。您必須建立一個檔案叫 gandi.yml
,存放於專案的根目錄中,定義 python
的版本:
gandi.yml
python:
version: 3.2
上述設定就會強制使用 Python 3.2 的版本。若是您只建立了檔案但並未設定 python
,或是您的 yaml 格式錯誤,將會跳回預設的版本。如果您指定了不存在的版本,則您的應用程式會無法執行,並且會在佈署日誌跟開機日誌中出現錯誤訊息。
備註
此檔案,跟其他您專案的檔一樣,必須要在您執行佈署指令之前,加入 Git 內並推送到 Simple Hosting 的遠端儲存庫中。
靜態檔案¶
請將您的靜態檔案儲存在名為 /static/
或是 /media/
的目錄中,這樣 Apache 伺服器就可以存取。
日誌檔¶
您的應用程式錯誤訊息將會寫入主機的日誌檔中:
若您使用 SSH 登入時,位置在:
/srv/data/var/log/www/uwsgi.log
若您使用 sFTP 登入時,位置在:
/lamp0/var/log/www/uwsgi.log
您可以查看這些檔案來了解應用程式是否正常啟動。
您也可以依照您的需求調整日誌檔,請在專案根目錄新增一個檔案叫 logging.ini
。
如果想瞭解更多資訊,請參考以下說明:
範例¶
Flask 範例¶
https://github.com/crito/minitwit
目錄結構
.
├── minitwit.py
├── requirements.txt
├── static/
├── templates/
└── wsgi.py
wsgi.py:
from minitwit import app as application
requirements.txt:
flask
Django 範例¶
目錄結構
.
├── media/
├── cms/
│ ├── manage.py
│ └── cms/
│ ├── init.py
│ ├── settings.py
│ ├── templates/
│ └── urls.py
├── requirements.txt
├── static/
└── wsgi.py
wsgi.py:
import sys
import os
import os.path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),
'cms')))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'cms.settings')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
requirements.txt:
django-cms
字元編碼¶
若您要在 uwsig 中指定特殊語系,例如您的檔案使用非英文字元,請在 uwsig.py
增加下列設定:
os.environ['LC_ALL']="en_US.UTF-8"
os.environ['LC_LANG']="en_US.UTF-8"