兩天前我剛剛爲自己畫了這張表。 按照Heroku's help pages for python中描述的步驟完成後,它被放在一起。
這絕不是絕對的,也不是完美的,它會改變,但它是一個有效的痕跡,因爲我可以把網站在線。
仍然存在一些問題,需要徹底檢查,例如, media/
文件上傳目錄的位置應該/可能出於安全原因存在於您的項目之外(現在它可以正常工作,但是我注意到如果dyno睡覺,那麼文件不會被模板在之後達到/顯示)。 目錄staticfiles/
也是如此(儘管這似乎工作正常)。
此外,您可能想將django的調試模式設置爲false。
所以在這裏,它是:
我到現有的Django應用程序部署到Heroku的第一步
假設:
一)Django項目是已經在虛擬環境
b)您已經收集了所有項目所需的包裝
pip freeze > requirements.txt
,並致力於它的git
git add requirements.txt
git commit -m 'my prj requirements'
0)激活項目的虛擬環境
workon xyz #using virtualenvwrapper
然後去Django項目目錄(DPD的簡稱)如果尚未採取有
cd ~/prj/xyz (or cdproject with virtualenvwrapper if setup properly)
並創建一個新的git分支,用於heroku twiddling以防止搞砸東西
git checkout -b he
1)創建在Heroku
heroku create xyz
的應用程序,還增加了Heroku的爲您的回購
2的遠程)添加所需的軟件包來requirements.txt
vi requirements.txt
add
dj-database-url==0.3.0
django-postgrespool==0.3.0
gunicorn==19.3.0
psycopg2==2.6
django-toolbelt==0.0.1
static3==0.5.1
whitenoise==2.0.3
3)在當地VENV
pip install -r requirements.txt --allow-all-external
4)設置安裝所有依賴Heroku的Django的設置
cd xyz
創建一個副本
cp setting.py settings_heroku.py
和編輯
vi settings_heroku.py
import os
import dj_database_url
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
與
DATABASES['default'] = dj_database_url.config()
DATABASES['default']['ENGINE'] = 'django_postgrespool'
和
WSGI_APPLICATION = 'xyz.wsgi_heroku.application'
5)配置必要的環境變量(Heroku的CONFIGS)取代Django的性病DB CFG
編輯.env
文件
vi .env
例如
DJANGO_SECRET_KEY=whatever
[email protected]
EMAIL_HOST_PASSWORD=whateveritis
和/或手動設置如果需要的話(在我的情況.env
沒有效果,沒有明顯加載,而不得不手動設置瓦爾現在)
heroku config:set DJANGO_SECRET_KEY=whatever
heroku config:set [email protected]
heroku config:set EMAIL_HOST_PASSWORD=whateveritis
6)創建對Heroku的
cd xyx
cp wsgi.py wsgi_heroku.py
獨立WSGI文件並編輯它,使之指向正確的設置
vi wsgi_heroku.py
from whitenoise.django import DjangoWhiteNoise
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xyz.settings_heroku")
application = get_wsgi_application()
application = DjangoWhiteNoise(application)
7)確保所有的模板使用
{% load staticfiles %}
8)定義Procfile文件,使其指向正確的WSGI
例如
cd ~/prj/xyz (DPD)
vi Procfile
添加
web: gunicorn xyz.wsgi_heroku --log-file -
9)收集所有的靜態內容到DPD/staticfiles/
本地,確保Django的指向右邊WSGI設置
export WSGI_APPLICATION=blogger.wsgi_heroku.application
python manage.py collectstatic
10)將更改添加到本地git回購(他分支)
git add --all .
git commit -m 'first 4 heroku'
11)檢查整個事情的作品在當地
heroku local # in heroku's help they also add `web`, not needed?!
12)把你的代碼的Heroku
git push heroku he:master
13)確保一個應用程序的實例運行
heroku ps:scale web=1
14)在heroku DB上創建表格
heroku run python manage.py migrate
注意:如果您看到一條消息:「您剛剛安裝了Django的身份驗證系統,這意味着您沒有定義任何超級用戶。你想現在創建一個嗎?「,輸入no。
15)超級用戶添加到Heroku的DB
heroku run bash
python manage.py createsuperuser
和補充細節,像往常一樣
16)填充DB必要的固定裝置
heroku run python manage.py loaddata yourfile.json
17)訪問在Heroku上的Web服務器
heroku open
01的網站的頁面個
或去
https://xyz.herokuapp.com/
和管理
https://xyz.herokuapp.com/admin/
和DB
https://xyz.herokuapp.com/db
有用的命令:
查看應用程序的日誌
heroku logs [--tail]
列表插件部署
heroku addons
,並使用一個:
heroku addons:open <add-on-name>
運行在Heroku的命令(遠程ENV,在那裏你正在部署)
heroku run python manage.py shell
heroku run bash
設置在Heroku上一個配置無功
heroku config:set VARNAME=whatever
查看所設置的配置瓦爾(包括DB的)
heroku config
查看postgres數據庫細節
heroku pg
檢查settings.py中。 Debug = flase ..一些設置可能是他們的.. – csharpcoder
你爲什麼認爲需要設置主機名和端口?你沒有。但是您確實需要閱讀Heroku網站上關於運行Django的非常全面的文檔。 –
例如,我無法想象是什麼讓您將runserver放置在您的Procfile中。你需要在那裏使用gunicorn。 –