万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

DjangoでHeroku ハマりどころまとめた

https://devcenter.heroku.com/articles/getting-started-with-django

ここを見ておくのがいい。 requirements見るのがいい。 pipで入れるものを記載しておくべき。

間違って

pip install Django==Django-1.7

と書くのではなく、

Django==Django-1.7

でいい。

HOSTNAMEについて

Rubyに負けるな!HerokuでPython(Django)動かす方法 - Qiita ここを見ると何の説明もなしに、hostnameというのがあるが、

python - Accessing Heroku's url root in Django settings.py - Stack Overflow このサイトを参考に、socketを使ってとるようにした。

hoge-MacBook-Pro.local

みたいな感じにとれる。

import socket
HOSTNAME = socket.gethostname()
URL_ROOT = HOSTNAME

if 'local' in HOSTNAME:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
else:
    import dj_database_url
    DATABASES = {
        'default': dj_database_url.config()
    }

あと、何かと問題なのはDjango 1.7のせいかもしれないが、

TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'))

DeprecationWarning: The TEMPLATE_DIRS setting must be a tuple. Please fix your settings, as auto-correction is now deprecated. self._wrapped = Settings(settings_module)
from os.path import join
TEMPLATE_DIRS = (
    join(BASE_DIR,  'templates'),
)

にした。

heroku run python manage.py syncdb

のコマンドをすることが必須。

下のログが出る。これはなに?

Running `python manage.py syncdb` attached to terminal... up, run.1760
System check identified some issues:

WARNINGS:
?: (1_6.W001) Some project unittests may not execute as expected.
    HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#new-test-runner for more information.
System check identified some issues:

WARNINGS:
?: (1_6.W001) Some project unittests may not execute as expected.
    HINT: Django 1.6 introduced a new default test runner. It looks like this project was generated using Django 1.5 or earlier. You should ensure your tests are all running & behaving as expected. See https://docs.djangoproject.com/en/dev/releases/1.6/#new-test-runner for more information.

settings.pyに

STATIC_ROOT = 'staticfiles'

がないと

git push heroku master

コマンドで失敗する。

syncdbのあとは

heroku restart

を行うのがいいようだ。

これやらないとダメみたい

heroku ps:scale web=1

ちなみにProcfileファイルが必要。直下に。

web: gunicorn --env DJANGO_SETTINGS_MODULE=jam.settings jam.wsgi --log-file -

のように書いた。※ jamは随時変更する。 ほかのサイトには"web: "が省略されててハマった。

jam.wsgiを同じ所においた。※ jamの部分は任意だと思う。僕も今度変える。

```` from django.core.wsgi import get_wsgi_application from whitenoise.django import DjangoWhiteNoise

application = get_wsgi_application() application = DjangoWhiteNoise(application)