[PYTHON] Deploy Django api on heroku (personal note)

specification

・ Python 2.7.10 -DB is sqlite3 locally and postgreSQL for production -Use Django REST Framework -Premise that a virtual environment is created in advance with Virtualenv

procedure

1 </ b> .cd [Django Project path] Generate 2 </ b> .requirements.txt. (Python version package.json or gemfile) If you hit pip freeze> requirements.txt, you can bring the one in the pip of virtualenv in one shot. In my case it looks like this

requirements.txt


dj-database-url==0.4.1
Django==1.9.7
django-filter==0.13.0
djangorestframework==3.3.3
psycopg2==2.6.1

Fill in the following in 3 </ b> .vi Procfile web: python manage.py runserver 0.0.0.0:$PORT --noreload Changed the DB part of 4 </ b> .setting.py

setting.py


import os
import dj_database_url

DATABASES = {'default': dj_database_url.config(default='postgres://localhost')}
if bool(os.environ.get('LOCAL_DEV', False)):
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3', 
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'USER': '',                      
            'PASSWORD': '',             
            'HOST': '',                     
            'PORT': '',                     
        }
    }

(If you don't want to commit the 5 </ b> .pyc file, create a .gitignore) push to 6 </ b> .heroku git init git add . git commit -m "hogegggggge" heroku create [app name] git push heroic master

Then

remote:            raise ImproperlyConfigured("You're using the staticfiles app "
remote:        django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
remote: 
remote:  !     Error while running '$ python manage.py collectstatic --noinput'.
remote:        See traceback above for details.
remote: 
remote:        You may need to update application code to resolve this error.
remote:        Or, you can disable collectstatic for this application:
remote: 
remote:           $ heroku config:set DISABLE_COLLECTSTATIC=1
remote: 
remote:        https://devcenter.heroku.com/articles/django-assets

Because it came out Add the following to setting.py

setting.py


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/

#I added the following
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)
#End of postscript

By the way heroku config:set DISABLE_COLLECTSTATIC=1 Execute. Then run git push heroku master.

Counting objects: 31, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (28/28), done.
Writing objects: 100% (31/31), 8.84 KiB | 0 bytes/s, done.
Total 31 (delta 10), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Python app detected
remote: -----> Installing python-2.7.11
remote:      $ pip install -r requirements.txt
remote:        Collecting dj-database-url==0.4.1 (from -r requirements.txt (line 1))
remote:          Downloading dj-database-url-0.4.1.tar.gz
remote:        Collecting Django==1.9.7 (from -r requirements.txt (line 2))
remote:          Downloading Django-1.9.7-py2.py3-none-any.whl (6.6MB)
remote:        Collecting django-filter==0.13.0 (from -r requirements.txt (line 3))
remote:          Downloading django_filter-0.13.0-py2.py3-none-any.whl
remote:        Collecting djangorestframework==3.3.3 (from -r requirements.txt (line 4))
remote:          Downloading djangorestframework-3.3.3-py2.py3-none-any.whl (662kB)
remote:        Collecting psycopg2==2.6.1 (from -r requirements.txt (line 5))
remote:          Downloading psycopg2-2.6.1.tar.gz (371kB)
remote:        Installing collected packages: dj-database-url, Django, django-filter, djangorestframework, psycopg2
remote:          Running setup.py install for dj-database-url: started
remote:            Running setup.py install for dj-database-url: finished with status 'done'
remote:          Running setup.py install for psycopg2: started
remote:            Running setup.py install for psycopg2: finished with status 'done'
remote:        Successfully installed Django-1.9.7 dj-database-url-0.4.1 django-filter-0.13.0 djangorestframework-3.3.3 psycopg2-2.6.1
remote: 
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 41.7M
remote: -----> Launching...
remote:        Released v6
remote:        https://cashe-api.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/cashe-api.git
 * [new branch]      master -> master

I got it. later, heroku run python manage.py migrate So, the initial setting of DB on heroku heroku open You can see it in your browser. For more information, See the official page (https://devcenter.heroku.com/articles/django-app-configuration).

reference

http://source.hatenadiary.jp/entry/2013/02/05/173636 http://qiita.com/jtwp470/items/0034c85130928851ce72

Recommended Posts