Reputation: 119
I'm deploying a Django web app in production on Heroku. I receive a Server Error (500) after checking with heroku logs --tail
.
I'm not sure how to get rid of the user warning which may be causing the issue.
Note, I'm running the app from a prod.py file with my wsgi.py set as:
wsgi.py
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.prod") # mysite.settings.prod when in prod
application = get_wsgi_application()
requirements.txt
dj-database-url==0.5.0
Django==2.1.2
django-heroku==0.3.1
# psycopg2==2.7.5
psycopg2-binary==2.7.5
pytz==2018.6
whitenoise==4.1
gunicorn==19.6.0
EDIT
Log File from Heroku CLI
I've aligned the Heroku PostgresQL version between my local dev and production and added PostgresQL in local dev to be more consistent. The site works when I test DEBUG=True. I can't find any error in the Chrome console log
Current Heroku log is:
2018-10-27T18:23:12.548825+00:00 app[web.1]: 10.170.101.130 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/js/util.js HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.551799+00:00 app[web.1]: 10.67.229.158 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/js/main.js HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.557365+00:00 app[web.1]: 10.182.99.110 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/prolay_ortho_view_logo.jpg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.560874+00:00 app[web.1]: 10.43.196.72 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/pexels-photo-574071.jpeg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.562847+00:00 app[web.1]: 10.168.66.175 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/safe.JPG HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.581753+00:00 app[web.1]: 10.67.229.158 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/Pipeline%20codes_w1134xh342pxl_tcm8-6122.jpg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.582343+00:00 app[web.1]: 10.182.99.110 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/3l-image-30.jpg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.591523+00:00 app[web.1]: 10.168.66.175 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/csm_Aegir_birdeye_d49a16a969.jpg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.598203+00:00 app[web.1]: 10.170.101.130 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/tumblr_inline_mz6qte2Eu41r1ki0v.png HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.599010+00:00 app[web.1]: 10.43.196.72 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/FSHR.png HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.623129+00:00 app[web.1]: 10.182.99.110 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/download.jpg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.658237+00:00 app[web.1]: 10.164.78.142 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/img/pexels-photo-546819.jpeg HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.557851+00:00 heroku[router]: at=info method=GET path="/static/assets/img/prolay_ortho_view_logo.jpg" host=appname etc etc request_id=6b463fc0-d4b3-41b0-953c-31bcde664c0b fwd="68.129.236.143" dyno=web.1 connect=0ms service=3ms status=304 bytes=168 protocol=https
2018-10-27T18:23:12.623553+00:00 heroku[router]: at=info method=GET path="/static/assets/img/download.jpg" host=appname etc etc request_id=d50864eb-3f17-4bea-99d2-d22e3ca20134 fwd="68.129.236.143" dyno=web.1 connect=0ms service=3ms status=304 bytes=167 protocol=https
2018-10-27T18:23:12.591261+00:00 heroku[router]: at=info method=GET path="/static/assets/img/csm_Aegir_birdeye_d49a16a969.jpg" host=appname etc etc request_id=74a1e2e3-af5b-4433-bd18-0e43df9e2673 fwd="68.129.236.143" dyno=web.1 connect=0ms service=5ms status=304 bytes=168 protocol=https
2018-10-27T18:23:12.524893+00:00 heroku[router]: at=info method=GET path="/static/assets/js/jquery.scrolly.min.js" host=appname etc etc request_id=28eed4be-a225-4061-a944-c1f8d9dcda94 fwd="68.129.236.143" dyno=web.1 connect=1ms service=3ms status=304 bytes=166 protocol=https
2018-10-27T18:23:12.595552+00:00 heroku[router]: at=info method=GET path="/static/assets/img/FSHR.png" host=appname etc etc request_id=51a12235-6cc0-433d-b73c-860c3ab73b8d fwd="68.129.236.143" dyno=web.1 connect=1ms service=12ms status=304 bytes=168 protocol=https
2018-10-27T18:23:12.531496+00:00 heroku[router]: at=info method=GET path="/static/assets/js/browser.min.js" host=appname etc etc request_id=dc5b8f1b-dd1b-4b27-9c6f-aa045bd4f940 fwd="68.129.236.143" dyno=web.1 connect=1ms service=6ms status=304 bytes=166 protocol=https
2018-10-27T18:23:12.563021+00:00 heroku[router]: at=info method=GET path="/static/assets/img/safe.JPG" host=appname etc etc request_id=fa116a25-c1fc-41c6-812f-e2704a7a875d fwd="68.129.236.143" dyno=web.1 connect=0ms service=8ms status=304 bytes=167 protocol=https
2018-10-27T18:23:12.583046+00:00 heroku[router]: at=info method=GET path="/static/assets/img/3l-image-30.jpg" host=appname etc etc request_id=63539c68-52ed-42a7-b563-db8ec9d359bd fwd="68.129.236.143" dyno=web.1 connect=0ms service=3ms status=304 bytes=167 protocol=https
2018-10-27T18:23:12.598417+00:00 heroku[router]: at=info method=GET path="/static/assets/img/tumblr_inline_mz6qte2Eu41r1ki0v.png" host=appname etc etc request_id=b21b3161-ed8c-4ab1-a414-61fcb220a8b0 fwd="68.129.236.143" dyno=web.1 connect=0ms service=8ms status=304 bytes=168 protocol=https
2018-10-27T18:23:12.773676+00:00 app[web.1]: 10.164.78.142 - - [27/Oct/2018:18:23:12 +0000] "GET /static/assets/fonts/fontawesome-webfont.woff2?v=4.7.0 HTTP/1.1" 304 0 "https://appname etc etc/static/assets/css/font-awesome.min.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:12.431862+00:00 heroku[router]: at=info method=GET path="/static/assets/js/jquery.min.js" host=appname etc etc request_id=bb6f4c97-2d36-4a66-a346-94f86fef7990 fwd="68.129.236.143" dyno=web.1 connect=0ms service=2ms status=304 bytes=168 protocol=https
2018-10-27T18:23:12.526196+00:00 heroku[router]: at=info method=GET path="/static/assets/js/breakpoints.min.js" host=appname etc etc request_id=2e6df0b3-93d6-470d-8791-dcc410f4d50b fwd="68.129.236.143" dyno=web.1 connect=0ms service=2ms status=304 bytes=166 protocol=https
2018-10-27T18:23:12.667031+00:00 heroku[router]: at=info method=GET path="/static/assets/img/pexels-photo-546819.jpeg" host=appname etc etc request_id=7dce7dbc-646d-4bb3-8c98-c9b0355c3bf8 fwd="68.129.236.143" dyno=web.1 connect=6ms service=13ms status=304 bytes=167 protocol=https
2018-10-27T18:23:12.551812+00:00 heroku[router]: at=info method=GET path="/static/assets/js/main.js" host=appname etc etc request_id=36332bfd-ce76-4724-bc84-4461db44f0c9 fwd="68.129.236.143" dyno=web.1 connect=0ms service=2ms status=304 bytes=166 protocol=https
2018-10-27T18:23:12.582055+00:00 heroku[router]: at=info method=GET path="/static/assets/img/Pipeline%20codes_w1134xh342pxl_tcm8-6122.jpg" host=appname etc etc request_id=6b91e488-58b2-48ab-977f-803347340c8d fwd="68.129.236.143" dyno=web.1 connect=0ms service=3ms status=304 bytes=168 protocol=https
2018-10-27T18:23:12.775494+00:00 heroku[router]: at=info method=GET path= "/static/assets/fonts/fontawesome-webfont.woff2?v=4.7.0" host=appname etc etc request_id=bb89dfef-08a5-4f2f-9a0c-be7794da3be2 fwd="68.129.236.143" dyno=web.1 connect=4ms service=14ms status=304 bytes=168 protocol=https
2018-10-27T18:23:21.894052+00:00 heroku[router]: at=info method=GET path="/static/assets/css/font-awesome.min.css" host=appname etc etc request_id=f3ae4cf5-2d66-4747-b7ef-e8eb8ca29381 fwd="68.129.236.143" dyno=web.1 connect=0ms service=15ms status=304 bytes=167 protocol=https
2018-10-27T18:23:21.893614+00:00 app[web.1]: 10.61.174.77 - - [27/Oct/2018:18:23:21 +0000] "GET /static/assets/css/font-awesome.min.css HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:21.894116+00:00 app[web.1]: 10.113.170.136 - - [27/Oct/2018:18:23:21 +0000] "GET /static/assets/css/main.css HTTP/1.1" 304 0 "https://appname etc etc/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:23:21.882264+00:00 heroku[router]: at=info method=GET path="/static/assets/css/main.css" host=appname etc etc request_id=7e6fd1d8-5500-4636-a3a2-fe59fea60de4 fwd="68.129.236.143" dyno=web.1 connect=0ms service=7ms status=304 bytes=167 protocol=https
2018-10-27T18:39:16.000000+00:00 app[api]: Build started by user [email protected]
2018-10-27T18:39:43.384267+00:00 app[api]: Deploy 5a9f1f4e by user [email protected]
2018-10-27T18:39:43.384267+00:00 app[api]: Release v37 created by user [email protected]
2018-10-27T18:39:43.768341+00:00 heroku[web.1]: Restarting
2018-10-27T18:39:43.769068+00:00 heroku[web.1]: State changed from up to starting
2018-10-27T18:39:44.595326+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2018-10-27T18:39:44.617853+00:00 app[web.1]: [2018-10-27 18:39:44 +0000] [10] [INFO] Worker exiting (pid: 10)
2018-10-27T18:39:44.626110+00:00 app[web.1]: [2018-10-27 18:39:44 +0000] [11] [INFO] Worker exiting (pid: 11)
2018-10-27T18:39:44.675226+00:00 app[web.1]: [2018-10-27 18:39:44 +0000] [4] [INFO] Handling signal: term
2018-10-27T18:39:44.776404+00:00 app[web.1]: [2018-10-27 18:39:44 +0000] [4] [INFO] Shutting down: Master
2018-10-27T18:39:44.944076+00:00 heroku[web.1]: Process exited with status 0
2018-10-27T18:39:50.467127+00:00 heroku[web.1]: Starting process with command `gunicorn mysite.wsgi --log-file -`
2018-10-27T18:39:54.000000+00:00 app[api]: Build succeeded
2018-10-27T18:39:54.293554+00:00 app[web.1]: [2018-10-27 18:39:54 +0000] [4] [INFO] Starting gunicorn 19.9.0
2018-10-27T18:39:54.295231+00:00 app[web.1]: [2018-10-27 18:39:54 +0000] [4] [INFO] Listening at: http://0.0.0.0:5467 (4)
2018-10-27T18:39:54.295432+00:00 app[web.1]: [2018-10-27 18:39:54 +0000] [4] [INFO] Using worker: sync
2018-10-27T18:39:54.302585+00:00 app[web.1]: [2018-10-27 18:39:54 +0000] [10] [INFO] Booting worker with pid: 10
2018-10-27T18:39:54.405429+00:00 app[web.1]: [2018-10-27 18:39:54 +0000] [11] [INFO] Booting worker with pid: 11
2018-10-27T18:39:54.878799+00:00 heroku[web.1]: State changed from starting to up
2018-10-27T18:39:56.637508+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-10-27T18:39:56.637526+00:00 app[web.1]: """)
2018-10-27T18:39:56.640843+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-10-27T18:39:56.640847+00:00 app[web.1]: """)
2018-10-27T18:40:00.946078+00:00 heroku[router]: at=info method=GET path="/" host=appname etc etc request_id=67a28d3f-33cf-4de5-aae2-46e28dd4e0c5 fwd="68.129.236.143" dyno=web.1 connect=1ms service=663ms status=500 bytes=361 protocol=https
2018-10-27T18:40:00.947531+00:00 app[web.1]: 10.101.183.181 - - [27/Oct/2018:18:40:00 +0000] "GET / HTTP/1.1" 500 27 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
2018-10-27T18:41:20.436823+00:00 app[api]: Starting process with command `python manage.py migrate` by user [email protected]
2018-10-27T18:41:28.736259+00:00 heroku[run.4727]: Awaiting client
2018-10-27T18:41:28.792885+00:00 heroku[run.4727]: Starting process with command `python manage.py migrate`
2018-10-27T18:41:28.823836+00:00 heroku[run.4727]: State changed from starting to up
2018-10-27T18:41:36.996317+00:00 heroku[run.4727]: Process exited with status 0
2018-10-27T18:41:37.014215+00:00 heroku[run.4727]: State changed from up to complete
2018-10-27T18:41:54.908245+00:00 app[api]: Starting process with command `python manage.py check --deploy` by user [email protected]
2018-10-27T18:42:04.214344+00:00 heroku[run.7761]: Awaiting client
2018-10-27T18:42:04.276622+00:00 heroku[run.7761]: Starting process with command `python manage.py check --deploy`
2018-10-27T18:42:04.288978+00:00 heroku[run.7761]: State changed from starting to up
2018-10-27T18:42:11.963509+00:00 heroku[run.7761]: Process exited with status 0
2018-10-27T18:42:11.981542+00:00 heroku[run.7761]: State changed from up to complete
2018-10-27T18:42:33.339983+00:00 app[api]: Starting process with command `pip install psycopg2-binary` by user [email protected]
2018-10-27T18:42:38.522056+00:00 heroku[run.7464]: Awaiting client
2018-10-27T18:42:38.545692+00:00 heroku[run.7464]: Starting process with command `pip install psycopg2-binary`
2018-10-27T18:42:38.827435+00:00 heroku[run.7464]: State changed from starting to up
2018-10-27T18:42:44.485848+00:00 heroku[run.7464]: State changed from up to complete
2018-10-27T18:42:44.471458+00:00 heroku[run.7464]: Process exited with status 0
2018-10-27T18:47:04.000000+00:00 app[api]: Build started by user [email protected]
2018-10-27T18:47:28.096216+00:00 app[api]: Deploy de1bada0 by user [email protected]
2018-10-27T18:47:28.096216+00:00 app[api]: Release v38 created by user [email protected]
2018-10-27T18:47:29.176560+00:00 heroku[web.1]: Restarting
2018-10-27T18:47:29.191742+00:00 heroku[web.1]: State changed from up to starting
2018-10-27T18:47:30.020966+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2018-10-27T18:47:30.039591+00:00 app[web.1]: [2018-10-27 18:47:30 +0000] [10] [INFO] Worker exiting (pid: 10)
2018-10-27T18:47:30.040480+00:00 app[web.1]: [2018-10-27 18:47:30 +0000] [11] [INFO] Worker exiting (pid: 11)
2018-10-27T18:47:30.063690+00:00 app[web.1]: [2018-10-27 18:47:30 +0000] [4] [INFO] Handling signal: term
2018-10-27T18:47:30.165169+00:00 app[web.1]: [2018-10-27 18:47:30 +0000] [4] [INFO] Shutting down: Master
2018-10-27T18:47:30.262607+00:00 heroku[web.1]: Process exited with status 0
2018-10-27T18:47:36.983340+00:00 heroku[web.1]: Starting process with command `gunicorn mysite.wsgi --log-file -`
2018-10-27T18:47:39.000000+00:00 app[api]: Build succeeded
2018-10-27T18:47:40.793859+00:00 heroku[web.1]: State changed from starting to up
2018-10-27T18:47:40.567667+00:00 app[web.1]: [2018-10-27 18:47:40 +0000] [4] [INFO] Starting gunicorn 19.9.0
2018-10-27T18:47:40.568549+00:00 app[web.1]: [2018-10-27 18:47:40 +0000] [4] [INFO] Listening at: http://0.0.0.0:59727 (4)
2018-10-27T18:47:40.568707+00:00 app[web.1]: [2018-10-27 18:47:40 +0000] [4] [INFO] Using worker: sync
2018-10-27T18:47:40.574950+00:00 app[web.1]: [2018-10-27 18:47:40 +0000] [10] [INFO] Booting worker with pid: 10
2018-10-27T18:47:40.657436+00:00 app[web.1]: [2018-10-27 18:47:40 +0000] [11] [INFO] Booting worker with pid: 11
2018-10-27T18:47:42.134059+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-10-27T18:47:42.134082+00:00 app[web.1]: """)
2018-10-27T18:47:42.166420+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
2018-10-27T18:47:42.166424+00:00 app[web.1]: """)
2018-10-27T18:48:30.044844+00:00 heroku[router]: at=info method=GET path="/" host=appname etc etc request_id=3fc78864-ef33-4259-8ed2-69dbfdb64ec7 fwd="68.129.236.143" dyno=web.1 connect=0ms service=508ms status=500 bytes=361 protocol=https
2018-10-27T18:48:30.043986+00:00 app[web.1]: 10.111.224.2 - - [27/Oct/2018:18:48:30 +0000] "GET / HTTP/1.1" 500 27 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
prod.py
from mysite.settings.base import *
# Overide base settings
DEBUG = False # False in Prod
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'debug': DEBUG,
},
},
]
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
DATABASES = {
'default': {
'ENGINE': os.environ['ENGINE'],
'NAME': os.environ['NAME'],
'USER': os.environ['USER'],
'PASSWORD': os.environ['PASSWORD'],
'HOST': os.environ['HOST'],
'PORT': os.environ['PORT'],
}
}
DATABASE_URL = os.environ['DATABASE_URL']
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
# DATABASE_URL = os.environ['DATABASE_URL']
# Change 'default' database configuration with $DATABASE_URL.
# DATABASES['default'].update(dj_database_url.config(conn_max_age=500, ssl_require=True))
# DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True)
# Allow all host headers
ALLOWED_HOSTS = ['*']
SECRET_KEY = os.environ['SECRET_KEY']
EMAIL_BACKEND = os.environ['EMAIL_BACKEND']
EMAIL_HOST = os.environ['EMAIL_HOST']
EMAIL_USE_TLS = os.environ['EMAIL_USE_TLS']
EMAIL_PORT = os.environ['EMAIL_PORT']
EMAIL_HOST_USER = os.environ['EMAIL_HOST_USER']
EMAIL_HOST_PASSWORD = os.environ['EMAIL_HOST_PASSWORD']
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_SSL_REDIRECT = True
X_FRAME_OPTIONS = 'DENY'
SECURE_HSTS_SECONDS = 60
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
# Heroku: Update database configuration from $DATABASE_URL.
import dj_database_url
DATABASES['default'] = dj_database_url.config(conn_max_age=600, ssl_require=True)
try:
from mysite.settings.local import *
except:
pass
Upvotes: 1
Views: 4660
Reputation: 119
I found my solution.
Step 1
Add this to the production settings file (source for this code is from here):
# Logging
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
},
},
}
Step 2
Ensure that you run python manage.py collectstatic --noinput
locally and use git push heroku master
to push your code to the Heroku server. Do this in Heroku CLI too using heroku run python manage.py collectstatic --noinput
Step 3
Use heroku logs --tail
to catch any errors which will be highlighted by calling the code in Step 1. In my case I had:
ValueError: Missing staticfiles manifest entry for 'assets/css/main.css
'
Moreover, I used the below code to eliminate the warning about psycog binary library.
conn = psycopg2.connect(DATABASE_URL, sslmode='require')
and import psycopg2
in my base settings file.
Lastly, there was some discussion elsewhere about Whitenoise and Static file directories.
I used the following setup:
import os
import dj_database_url
import django_heroku
import psycopg2
# import sys
# from secrets import *
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
# Application definition
INSTALLED_APPS = [
# Disable Django's own staticfiles handling in favour of WhiteNoise, for
# greater consistency between gunicorn and `./manage.py runserver`. See:
# http://whitenoise.evans.io/en/stable/django.html#using-whitenoise-in-development
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
'landing',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'mysite.urls'
WSGI_APPLICATION = 'mysite.wsgi.application'
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
ADMINS = (('Webmaster','[email protected]'))
MANAGERS = ADMINS
# Change 'default' database configuration with $DATABASE_URL.
# DATABASES['default'].update(dj_database_url.config(conn_max_age=500, ssl_require=True))
# Honor the 'X-Forwarded-Proto' header for request.is_secure()
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
# STATICFILES_DIRS = [
# os.path.join(PROJECT_ROOT, 'static'),
# ]
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
# Activate Django-Heroku.
django_heroku.settings(locals())
Lastly, in the wsgi.py file, ensure this config:
import os
from django.core.wsgi import get_wsgi_application
# Whitenoise should not appear here: http://whitenoise.evans.io/en/stable/changelog.html#v4-0
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.prod") # mysite.settings.prod when in prod
application = get_wsgi_application()
Upvotes: 1