Django 1.11 Herokuでデプロイ

Python独学ならTech-Joho TOP > django入門/ > Django 1.11 Herokuでデプロイ

Herokuは無料枠もあるPaasです。
Djangoで作ったWebアプリケーションを無料で公開できます。

Ruby on Railsではよく使っていましたが、Djangoは初めてだったので試してみました。

参考
https://qiita.com/Shitimi_613/items/6627d0ce042d38b86893

アプリはこちらのやつ
Django 1.11 モデルの追加とマイグレーション

windows上で開発しているので、関連箇所あり。

> pip install django-toolbelt

Procfileを作成

web: gunicorn djangoTestApp2.wsgi --log-file -

runtime.txtを作成

python-3.6.2

requirements.txtを作成

pip freeze > requirements.txt

この後、pywin23の行を削除する
そのほか、pipにいらないパッケージがあった場合も削除
いるものだけ書けばよい

settings.py に追記

STATICFILES_DIRS = (
  os.path.join(BASE_DIR, 'static'),
)
# DATABASES~の下あたりに追記
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=400)
DATABASES['default'].update(db_from_env)

djangoTestApp/wsgi.pyを変更

import os

from dj_static import Cling # これ追記
from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoTestApp.settings")

application = Cling(get_wsgi_application()) # ここ変更

Herokuのツールのインストール
https://devcenter.heroku.com/articles/heroku-cli

herokuでログイン

> heroku login
Enter your Heroku credentials:
Email: xxxx@xxxxx.net
Password: ************
Logged in as xxxx@xxxx.net

herokuのプロジェクト作成

> heroku create
Creating app... done, xxxx-xxxx-xxxx
https://xxxx-xxxx-xxxx.herokuapp.com/ | https://git.heroku.com/xxxx-xxxx-xxxx.git

注意!! 以下のようにすれば後々のビルドパックの指定がいらなかった

> heroku create --buildpack heroku/python

ここででてきたアプリのホストを、settings.pyに追加

ALLOWED_HOSTS = [
    'xxxx-xxxx-xxxx.herokuapp.com'
]

よくわからない設定(静的ファイル関係だと思うけど)

heroku config:set DISABLE_COLLECTSTATIC=1

デプロイ

git push heroku master

エラー出た

> git push heroku master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (19/19), 4.91 KiB | 1005.00 KiB/s, done.
Total 19 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote:  !     No default language could be detected for this app.
remote:                         HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote:                         See https://devcenter.heroku.com/articles/buildpacks
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to salty-river-85500.
remote:
To https://git.heroku.com/xxxx-xxxx-xxxx.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/xxxx-xxxx-xxxx.git';


webのほうで、Pythonのビルドパックを追加した

Herokuのアプリ管理

ビルドパック追加

再度

git push heroku master

マイグレーション

> heroku run python manage.py migrate


アプリを開く

> heroku open


NameError: name ‘xxx’ is not defined | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > NameError: name ‘xxx’ is not defined

Pythonのプログラムをつくっていて、”NameError: name ‘xxx’ is not defined”というエラーの意味や、このエラーが表示されたときのなおし方についてのページです。

エラーの全体は、このような内容になっているはずです。

Traceback (most recent call last):
module __main__ line 145
traceback.print_exc()
module <module> line 10
NameError: name ‘xxx’ is not defined

このうち、重要なのは一番最後の行です。

このxxxの部分は人によって違うと思いますので、実際のエラーにある内容に置き換えて考えて下さい。

エラーの意味

NameErrorは日本語にすると名前のエラー。

つまり、変数の名前に関するエラーです。

name ‘xxx’ is not definedの意味は、xxxという名前の変数が定義されていませんという意味です。

考えられる原因となおし方

1 変数名の書き間違い

恐らく、一番ありがちなのは、定義してある変数を間違った変数名で呼び出そうとしている場合です。

変数 xxを定義したのに、xxxに代入しようとしている、

変数pictureの綴りを間違えて、pictuleになっている等です。

2 変数がない

本当に定義されていない変数に値を代入しようとしている場合もあります。

コピペを駆使してプログラムを作っている時に、起こりがちです。

そのようなときは、エラーの下から2行目を見て、エラーが発生している箇所を突き止めましょう。

module <module> line 10

このような場合、line 10、つまり1行目でエラーが発生しています。

10行目より上で、変数(例のエラーの場合xxx)を定義しましょう。

 

Python = | Python用語辞典

Python独学ならTech-Joho TOP > Python用語辞典 > Python =

Pythonの”=”の意味

このページでは、Pythonでの”=”の意味について説明します。

“=”は、イコールと読みます。

 


=の意味

Pythonでは、”=”は、その右に書いた値を、左に書いた変数に代入するための文字です。

例えば、”x = 10″と書くと、”=”の右の10を”=”の左のxに代入します。

“=”は、正確には、代入演算子(だいにゅうえんざんし)とよびます。

 


代入とは

代入の意味は、変数を箱として考えるとわかやすいかもしれません。

xという箱(変数)に、10という整数の値を入れるのが、代入だと考えてみて下さい。

Pythonにおける代入のイメージ

 


“=”をためしてみる

下の黒い欄では、Pythonのプログラムを入力して実行することができます。実際に”=”を使ってみましょう。

 

まず、”x = 10″と入力して、エンターを押してください。

これで、変数xに10という数字(整数)が代入されました。

この状態で、”print(x)”と入力してエンターを押してください。

これは、xに設定されている値を表示して下さい、とPythonに命令しています。

すると、先程xに代入した10が表示されます。

xに10を代入する例

 

続けて、”x = 20″と入力して、エンターを押してください。

これで、変数xに20という数字(整数)が新たに代入されました。

この状態で、”print(x)”と入力してエンターを押してください。

これは、xに設定されている値を表示して下さい、とPythonに命令しています。

すると、最初に代入した10ではなく、次に代入した20が表示されます。

代入演算子による代入の例


==と=の違い

数学や算数では、”=”は左辺と右辺が等しい、同じ値であることを表す記号、等号(とうごう)です。

そのため、Pythonでも、”=”を左右が等しい、という意味と勘違いしてしまう人がいます。

しかし、Pythonでは、”=”はその左右の値が等しいという意味ではありません。

 

Pythonでは、イコールを2つ横に並べる”==”がでてきます。

“==”と”=”は、によく似ていますが違う意味です。

“==”は、Pythonで、左右の値が等しいかどうかを調べ、等しければ”True”を、等しくなければ”False”を返す比較演算子です。

詳しくは、”==”の記事をご覧ください。