質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Q&A

解決済

1回答

2298閲覧

herokuにデプロイ後Application errorが発生しWebサイトが表示されません.

WK_ZAKK

総合スコア20

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

0グッド

0クリップ

投稿2021/06/04 02:24

編集2021/06/07 04:05

Djangoの勉強としてWebアプリを作成しデプロイをしたところHerokuApplicationエラーが発生し,Webページを開くことが出来ません.

なんとかこのApplication errorを解消し本番環境でアプリを動作させてみたいです.

local環境ではきちんと動作しています.

  • Python3.7.9
  • Django3.1.2

Herokuからはlogを確認するように指示され,heroku logs --tailでログを確認しました.
以下にログを記載します.

heroku_application error

log前半
log後半

(申し訳ございません,文字数オーバーになりましたので,画像になっております.)

wsgi.pyのfrom dj-static import Clingが悪さをしているのか,認識されていないのかなと予測していますが,それに対してどう対処すればよいかもわかっていません.

###試したこと

  • heroku restart app app_name
  • wsgi.pyの確認
  • インターネットの記事を参考にHerokuがdj-staticをみつけられていなのかも?というのがありましたので,

######wsgi.py

Python

1import os 2 3from dj_static import Cling 4from django.core.wsgi import get_wsgi_application 5 6os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 7 8application = Cling(get_wsgi_application())

Python

1import os 2 3#from dj_static import Cling 4from django.core.wsgi import get_wsgi_application 5from whitenoise.django import DjangoWhiteNoise 6 7os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 8 9#application = Cling(get_wsgi_application()) 10application = get_wsgi_application() 11application = DjangoWhiteNoise(application)

に変えてみましたがエラーは治りませんでした.

######requirements.txt

txt

1asgiref==3.2.10 2certifi==2020.6.20 3chardet==3.0.4 4dj-database-url==0.5.0 5dj-static==0.0.6 6Django==3.1.2 7gunicorn==20.1.0 8idna==2.10 9Pillow==5.4.1 10psycopg2-binary==2.8.6 11pytz==2020.1 12requests==2.25.1 13setuptools==49.2.0 14sqlparse==0.3.1 15static3==0.7.0 16urllib3==1.24.1 17whitenoise==5.2.0

Procfile

1web: gunicorn myproject.wsgi

######runtime.txt

txt

1python-3.7.9

: 追記
エラーが発生した際のcodeでは

python

1import os 2 3from dj-static import Cling 4from django.core.wsgi import get_wsgi_application 5 6os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 7 8application = Cling(get_wsgi_application())

と上記の三行目,from dj-static import Cling
として,github並びにHerokuへpushしていましたが,上記のcodeを修正した後,commit,pushをしておりませんでした.

現在のcodeでは下記のようになっております.

python

1import os 2 3from dj_static import Cling 4from django.core.wsgi import get_wsgi_application 5 6os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings") 7 8application = Cling(get_wsgi_application())

三行目の from dj-static import Clingをfrom dj_static import Clingと修正しています.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

attakei

2021/06/04 02:45

- 画像として掲載しているエラーが出ているときのコードを記載し直す - 現状のコード(「変えてみた」のバージョン)で状況再現させてみたエラー状況の画像を貼り直す のいずれかをしてもらったほうがいいかなと思います。 なぜかというと、画面のエラーは「dj-staticというパッケージの利用に対してdj-staticという間違った名前でインポートを行おうとしている」ことに対するエラーなのですが、記載されているコードはすでにそれが解消されているためです(https://pypi.org/project/dj-static/ にもある通り、 dj_staticでのインポートで正しいはず)
WK_ZAKK

2021/06/04 03:22

追記・修正依頼頂きありがとうございます. 申し訳ありませんがまだherokuの仕様についてよく理解しておらず,コードに変更を加えるたびに再度デプロイ?push?commitをしなければいくらコードに変更を加えても意味がないのでしょうか. 修正依頼に対する回答がずれる形になってしまい申し訳ありません.
attakei

2021/06/04 03:28

> コードに変更を加えるたびに再度デプロイ?push?commitをしなければいくらコードに変更を加えても意味がないのでしょうか. はい、そうです。herokuはコードの変更をpushなどで受け取って始めてそのコードで動作します。 そのため、変更したコードをheroku上で確認するには、都度commitとpushを行う必要があります。 ...というやり取りになっているということは、おそらく質問文で掲載されているコードの変更後は一度もherokuで動作確認をしていないと思うので、 記載されているコードのうちwsgi.pyを最初に記載された方のコードで再度動作確認してみてください。 コードを単純に読み取る限りでは動く可能性があります。
WK_ZAKK

2021/06/04 03:39

ありがとうございます! これから講義がはじまりますので,夕方ごろに試してみます......
WK_ZAKK

2021/06/07 03:56

遅くなり申し訳ございません. お教え頂いた内容から,githubへの変更したcodeのcommit,push. githubへpushした内容をHerokuにpushした結果,作成したブログサイトを公開することができました. ベストアンサーに指定させて頂きたいので,お手数ですが,アンサーとして再度ご投稿をお願いできますでしょうか? 宜しくお願い致します.
guest

回答1

0

ベストアンサー

※追記・修正依頼でのやり取りを元に、検索で見に来た人も参考になる形式で回答を投稿します

1: Application errorそのものについて

wsgi.pyのfrom dj-static import Clingが悪さをしているのか,認識されていないのかなと予測していますが,それに対してどう対処すればよいかもわかっていません.

質問投稿時点で解決している通り、dj-staticを使う際はパッケージ名とは違うdj_staticを使う必要があります。
(Pythonモジュールの名称として、ハイフンは使用できないため)

そのため、インポートを行う際にはパッケージのドキュメントを見つつ、正しい形式でインポートする必要があります。

2: herokuでの動作確認について

に変えてみましたがエラーは治りませんでした.

heroku上のアプリケーションは、当然ながらheroku上のコードが変わらない限り動作が変わりません。
そのため、ローカルで修正を行った後に必ずcommit->pushなどを経由してheroku上に反映する必要があります。

補足:ローカルでの事前確認

前述の通り、herokuへの正しいpushで確認できるのですが、このケースで事前にやっておくほうが良いこととして
「デプロイ先と可能な限り同じ条件で動作するかを、あらかじめローカル環境で確認する」
というものがあります。

Djangoの場合だとローカルでの動作確認に対してpython manage.py runserverという組み込みサーバー機能を使うことがほとんどですし、ほとんどのケースの動作確認はこれで問題ありません。
しかし、このケースだとwsgi.pyを使わないため、このファイルが正しく機能しているかの確認が出来ません。
wsgi.pyはgunicornなどのアプリケーションサーバー側のエントリーポイントとして用いるのみのため、runserverでは経由しない)

そのため、実際にheroku等で使うコマンド自体も事前に確認しておくとトラブルを未然に防ぐことが出来ます。

$ gunicorn myproject.wsgi

今回のProcfileからの例だと、必要なライブラリをセットアップしてから上記コマンドを実行して「単純にサーバープロセスが待ち受けするか」を確認するだけでも防げる可能性があります。
(ブラウザでの動作確認まではしなくて良いです)

投稿2021/06/08 03:04

attakei

総合スコア2740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WK_ZAKK

2021/06/08 03:25

ありがとうございます! 詳細な回答を頂いたことにより,さらに理解することができました. 大変助かりました☺
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問