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

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

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

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2157閲覧

Herokuへのデプロイ時にModuleNotFoundError

KazukiTanno

総合スコア4

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/07 14:06

前提・実現したいこと

flaskでウェブアプリを作成し,herokuにデプロイしようとしています.
ディレクトリの構成は以下のようにしています.

bash

1/ 2├frontend 3├backend 4│ ├main.py 5│ └api.py 67├Pipfile 8├Pipfile.lock 9├Procfile 10├requirements.txt 11└rentime.txt

Herokuへのデプロイは問題なく行えたのですが,ブラウザで確認するとapplication errorとなっていました.
エラーメッセージから察するに,main.py内でapi.pyを呼び出している箇所が上手く動作していないようです.
自分でいくつか調べてみたのですが,解決方法がわからず,手詰まりとなっている状況です.

発生している問題・エラーメッセージ

heroku openでブラウザを起動すると,application errorとなり,heroku logs --tailを実行すると,下記のようなエラーが出ます.

2020-03-07T13:53:54.436052+00:00 heroku[web.1]: State changed from starting to crashed 2020-03-07T13:53:54.440596+00:00 heroku[web.1]: State changed from crashed to starting 2020-03-07T13:53:54.421252+00:00 heroku[web.1]: Process exited with status 3 2020-03-07T13:53:59.526616+00:00 heroku[web.1]: Starting process with command `gunicorn -b 0.0.0.0:43457 backend.main:app` 2020-03-07T13:54:01.996346+00:00 heroku[web.1]: State changed from starting to crashed 2020-03-07T13:54:01.549850+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [4] [INFO] Starting gunicorn 20.0.4 2020-03-07T13:54:01.550738+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [4] [INFO] Listening at: http://0.0.0.0:43457 (4) 2020-03-07T13:54:01.550846+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [4] [INFO] Using worker: sync 2020-03-07T13:54:01.554785+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [10] [INFO] Booting worker with pid: 10 2020-03-07T13:54:01.644973+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [11] [INFO] Booting worker with pid: 11 2020-03-07T13:54:01.717102+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [10] [ERROR] Exception in worker process 2020-03-07T13:54:01.717104+00:00 app[web.1]: Traceback (most recent call last): 2020-03-07T13:54:01.717105+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker 2020-03-07T13:54:01.717105+00:00 app[web.1]: worker.init_process() 2020-03-07T13:54:01.717106+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/workers/base.py", line 119, in init_process 2020-03-07T13:54:01.717106+00:00 app[web.1]: self.load_wsgi() 2020-03-07T13:54:01.717106+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi 2020-03-07T13:54:01.717107+00:00 app[web.1]: self.wsgi = self.app.wsgi() 2020-03-07T13:54:01.717107+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/base.py", line 67, in wsgi 2020-03-07T13:54:01.717108+00:00 app[web.1]: self.callable = self.load() 2020-03-07T13:54:01.717108+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 49, in load 2020-03-07T13:54:01.717108+00:00 app[web.1]: return self.load_wsgiapp() 2020-03-07T13:54:01.717109+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp 2020-03-07T13:54:01.717109+00:00 app[web.1]: return util.import_app(self.app_uri) 2020-03-07T13:54:01.717110+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/gunicorn/util.py", line 358, in import_app 2020-03-07T13:54:01.717110+00:00 app[web.1]: mod = importlib.import_module(module) 2020-03-07T13:54:01.717110+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/importlib/__init__.py", line 127, in import_module 2020-03-07T13:54:01.717111+00:00 app[web.1]: return _bootstrap._gcd_import(name[level:], package, level) 2020-03-07T13:54:01.717111+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 1006, in _gcd_import 2020-03-07T13:54:01.717112+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 983, in _find_and_load 2020-03-07T13:54:01.717112+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked 2020-03-07T13:54:01.717113+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 677, in _load_unlocked 2020-03-07T13:54:01.717113+00:00 app[web.1]: File "<frozen importlib._bootstrap_external>", line 728, in exec_module 2020-03-07T13:54:01.717113+00:00 app[web.1]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed 2020-03-07T13:54:01.717114+00:00 app[web.1]: File "/app/backend/main.py", line 4, in <module> 2020-03-07T13:54:01.717114+00:00 app[web.1]: from api import get_user_bp, login_bp, mypage_init_bp, data_update_bp 2020-03-07T13:54:01.717119+00:00 app[web.1]: ModuleNotFoundError: No module named 'api' 2020-03-07T13:54:01.717268+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [10] [INFO] Worker exiting (pid: 10) 2020-03-07T13:54:01.844003+00:00 app[web.1]: [2020-03-07 13:54:01 +0000] [11] [ERROR] Exception in worker process 2020-03-07T13:54:01.844024+00:00 app[web.1]: Traceback (most recent call last): 2020-03-07T13:54:01.844025+00:00 app[web.1]: File

ModuleNotFoundError: No module named 'api'とあることから,おそらくmain.py内で自作モジュールapi.pyを上手く呼び出すことが出来ていないのだと思います.

該当のソースコード

main.pyでは,以下のコードでapi.pyをインポートしています.

python

1from flask import Flask, render_template 2from api import get_user_bp, login_bp, mypage_init_bp, data_update_bp

Pipfile

[[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] flask = "*" gunicorn = "*" pyrebase = "*" flask-restful = "*" [requires] python_version = "3.7" [scripts] start = "python backend/main.py"

Procfile

web: gunicorn -b 0.0.0.0:$PORT backend.main:app

requirements.txt

aniso8601==8.0.0 Click==7.0 Flask==1.1.1 Flask-RESTful==0.3.8 gcloud==0.17.0 googleapis-common-protos==1.51.0 gunicorn==20.0.4 httplib2==0.17.0 itsdangerous==1.1.0 Jinja2==2.11.1 jws==0.1.3 MarkupSafe==1.1.1 oauth2client==3.0.0 protobuf==3.11.3 pyasn1==0.4.8 pyasn1-modules==0.2.8 pycryptodome==3.4.3 Pyrebase==3.0.27 python-jwt==2.0.1 pytz==2019.3 requests==2.11.1 requests-toolbelt==0.7.0 rsa==4.0 six==1.14.0 Werkzeug==1.0.0

runtime.txt

python-3.7.5

試したこと

  • main.pyapi.pyを呼び出す部分を除いたコードをデプロイした際は,問題なくアプリケーションがweb上で確認することが出来ました.
  • localでは,api.pyの呼び出しも含め,何もエラーは出ていません.

補足情報(FW/ツールのバージョンなど)

  • Heroku: Freeアカウント
  • ローカル環境:python3.7.5

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

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

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

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

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

guest

回答1

0

自己解決

Procfileを以下のように書き換えることで解決しました.

web: gunicorn -b 0.0.0.0:$PORT --pythonpath backend backend.main:app

投稿2020/03/07 14:26

KazukiTanno

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問