Deploying_Django_To_Heroku_Tutorial
Deploying a Django App To Heroku Tutorial
後端有一個自動爬蟲的程式去抓圖片,可參考 auto_crawler_ptt_beauty_image 。
本專案將教大家如何將自己的 Django 佈署到 Heroku
Heroku 免費版本
- 可以創造 5個 app。
- 24小時一定要休息6小時的規定。
- 支援很多種程式語言。
- 有SSL ( https ) 。
更多說明請參考 Heroku
詳細的步驟可參考 Deploying-Flask-To-Heroku ,
下面將只介紹佈署 Django 要注意的步驟。
教學
我的 project_name 為 ptt_beauty_images
設定 Procfile
web: gunicorn ptt_beauty_images.wsgi
更多說明請參考
https://devcenter.heroku.com/articles/django-app-configuration#the-basics
設定 ALLOWED_HOSTS
ALLOWED_HOSTS = ['*']
設定 Static assets and file serving
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
更多說明請參考 https://devcenter.heroku.com/articles/django-app-configuration#static-assets-and-file-serving
設定 Whitenoise
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
更多說明請參考 https://devcenter.heroku.com/articles/django-app-configuration#whitenoise
設定 Collectstatic
Disabling Collectstatic
heroku config:set DISABLE_COLLECTSTATIC=1
更多說明請參考
https://devcenter.heroku.com/articles/django-assets#collectstatic-during-builds
設定 DATABASE
我使用 Heroku Postgres ,
詳細教學可參考 如何在 heroku 上使用 database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ.get('DATABASE_NAME'),
'USER': os.environ.get('DATABASE_USER'),
'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
'HOST': os.environ.get('DATABASE_HOST'),
'PORT': os.environ.get('DATABASE_PORT'),
}
}
請在自己 Heroku 的 Config Variables 設定 DATABASE 連線字串
Django multiple-databases
順便介紹在 Django 中的 multiple-databases,
使用方法, 將 settings.py 裡的 DATABASES 修改成如下
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ.get('DATABASE_NAME'),
'USER': os.environ.get('DATABASE_USER'),
'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
'HOST': os.environ.get('DATABASE_HOST'),
'PORT': os.environ.get('DATABASE_PORT'),
},
'db2': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ.get('DATABASE_NAME_2'),
'USER': os.environ.get('DATABASE_USER_2'),
'PASSWORD': os.environ.get('DATABASE_PASSWORD_2'),
'HOST': os.environ.get('DATABASE_HOST_2'),
'PORT': os.environ.get('DATABASE_PORT_2'),
}
}
這樣就代表你有兩個 DATABASES,更多資料可參考 Django multi-db
如果要指定 DATABASES 也非常容易,
假設我今天要用 'default' 這個 DB ,可以寫這樣
Image.objects.using('default').all()
假設我今天要用 'db2' 這個 DB,可以寫這樣
Image.objects.using('db2').all()
有沒有發現,其實就是 using('database name') 這樣,非常簡單
更多資料可參考 Django manually-selecting-a-database
執行環境
- Python 3.6.0
Reference
Donation
文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡
License
MIT license