/Deploying_Django_To_Heroku_Tutorial

Deploying a Django App To Heroku Tutorial

Primary LanguageCSS

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

settings.py

ALLOWED_HOSTS = ['*']

設定 Static assets and file serving

settings.py

# 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

settings.py

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

wsgi.py

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

settings.py

我使用 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

文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡:laughing:

alt tag

贊助者付款

License

MIT license