今天的實作內容主要根據教學網站進行。
Heroku主要利用四個檔案來設定環境:
接下來我將逐一設定這些檔案。
用來標示使用的程式語言運行環境與版本。
新增方法:在專案根目錄 (和manage.py同一層級)新增runtime.txt,其中內容如下:
python-3.9.7
要注意的是Heroku並不是所有版本都支援,故需要先去Heroku網站確認Python的支援版本,不然在推送到Heroku時會發生問題。
同樣在根目錄下新增Procfile檔案,內容如下:
web: gunicorn bookhelper.wsgi --log-file -
gunicorn為Heroku推薦的web application server,此段宣告gunicorn使用bookhelper.wsgi作為組態設定。
用來宣告要安裝的Python套件。
需要安裝的Python套件可以使用以下指令,將開發環境有安裝的套件列出:
pip freeze > requirements.txt
輸出的檔案一樣放在根目錄,Heroku會根據此檔案進行安裝,但要注意的是如果是自己私人開發未上傳到PYPI的套件 (如Day17內容)就無法使用。
除了開發階段已安裝的套件外,因應正式環境的環境設置,還有一些額外的套件需要安裝。
實際requirement.txt內容:
dj-database-url==0.5.0
Django==3.2.7
django-allauth==0.45.0
django-q==1.3.9
gunicorn==20.1.0
psycopg2==2.9.1
whitenoise==5.3.0
gunicorn
dj-database.url
在開發期間,django的settings.py中我們使用local資料庫連線設定,當上傳到正式環境時,Heroku以add-on透過URL的方式提供我們使用。
Heroku建議使用此套件以解析資料庫使用的URL。
settings.py可以調整如下:
# Heroku: Update database configuration from $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
psycopg2
Heroku的免費方案中提供的資料庫為Postgres,故需要安裝對應的套件。
WhiteNoise
用來提供Python web app的靜態檔案。(如果透過Django提供靜態檔案的話效能會較差)
settings.py要配合做以下設定:
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
因為時間因素,今天內容就先更新到這邊,明天再接續後面的流程。