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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

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

Q&A

解決済

2回答

749閲覧

pythonanywhereエラー Error running WSGI application

kainet24

総合スコア1

Python 3.x

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

0グッド

0クリップ

投稿2024/03/28 05:22

編集2024/03/28 14:48

実現したいこと

ルートディレクトリの.envファイルで定義したSQLALCHEMY_DATABASE_URIを__init__.pyでインポートして使用しているがSQLALCHEMY_DATABASE_URIが定義できていないとエラーが出てしまう。
print(os.getenv("SQLALCHEMY_DATABASE_URI"))で正しく表示できたので、インポートに問題はなさそう
ディレクトリ配置は
app
┝__init__.py
┝route.py
┝models.py
└templates - 諸々.html
.env
run.py
ローカル環境では問題なく実行できている。

発生している問題・分からないこと

'SQLALCHEMY_DATABASE_URI'を設定しているが、SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set.というエラーが出てしまう。

エラーメッセージ

error

12024-03-28 04:50:08,976: Error running WSGI application 22024-03-28 04:50:08,977: RuntimeError: Either 'SQLALCHEMY_DATABASE_URI' or 'SQLALCHEMY_BINDS' must be set. 32024-03-28 04:50:08,977: File "/var/www/kainet24_pythonanywhere_com_wsgi.py", line 16, in <module> 42024-03-28 04:50:08,977: from run import app as application # noqa 52024-03-28 04:50:08,977: 62024-03-28 04:50:08,978: File "/home/kainet24/gantt-chart/run.py", line 1, in <module> 72024-03-28 04:50:08,978: from app import app, db 82024-03-28 04:50:08,978: 92024-03-28 04:50:08,978: File "/home/kainet24/gantt-chart/app/__init__.py", line 22, in <module> 102024-03-28 04:50:08,978: db = SQLAlchemy(app) 112024-03-28 04:50:08,978: 122024-03-28 04:50:08,978: File "/home/kainet24/differential-venv/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 278, in __init__ 132024-03-28 04:50:08,978: self.init_app(app) 142024-03-28 04:50:08,978: 152024-03-28 04:50:08,978: File "/home/kainet24/differential-venv/lib/python3.9/site-packages/flask_sqlalchemy/extension.py", line 355, in init_app 162024-03-28 04:50:08,978: raise RuntimeError(

該当のソースコード

python

1#pythonanywhere_com_wsgi.py 2# This file contains the WSGI configuration required to serve up your 3# web application at http://<your-username>.pythonanywhere.com/ 4# It works by setting the variable 'application' to a WSGI handler of some 5# description. 6# 7# The below has been auto-generated for your Flask project 8 9import sys 10 11# add your project directory to the sys.path 12project_home = '/home/kainet24/gantt-chart' 13if project_home not in sys.path: 14 sys.path = [project_home] + sys.path 15 16# import flask app but need to call it "application" for WSGI to work 17from run import app as application # noqa 18 19# このファイル内で project_home = '/home/USERNAME/mysite' と設定されている前提 20 21import os 22from dotenv import load_dotenv 23 24# プロジェクトフォルダ直下に.envを置く場合 25load_dotenv(os.path.join(project_home, '.env'))

python

1#run.py 2from app import app, db 3 4if __name__ == '__main__': 5 with app.app_context(): 6 db.create_all() 7 app.run(debug=False, port=5010)

python

1#__init__.py 2from flask import Flask 3from flask_sqlalchemy import SQLAlchemy 4from flask_login import LoginManager 5from flask_wtf.csrf import CSRFProtect 6from flask_migrate import Migrate 7from flask_cors import CORS 8 9import os 10# from os.path import join, dirname 11from dotenv import load_dotenv 12 13load_dotenv() 14 15app = Flask(__name__) 16app.config['SECRET_KEY'] = os.getenv("SECRET_KEY") 17app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv("SQLALCHEMY_DATABASE_URI") 18app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 19csrf = CSRFProtect(app) 20CORS(app) 21 22db = SQLAlchemy(app) 23migrate = Migrate(app, db) 24 25login_manager = LoginManager() 26 27login_manager.init_app(app) 28login_manager.login_view = 'login' 29 30from .models import User 31from .routes import *

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

似たような状況でのエラーが検索しても出てこず困っている。

補足

.envファイルからos.getenv("SQLALCHEMY_DATABASE_URI")が呼び出せていることは確認済みです。

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

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

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

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

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

quickquip

2024/03/28 09:35 編集

貼ってあるソースコードのファイル名はなんですか? File "/home/kainet24/gantt-chart/app/__init__.py", line 22, in <module> db = SQLAlchemy(app) の行番号がコードと異なるのが気になりますが、コメントか何かをはしょったりしてますか? (このコードが配置しているファイル /home/kainet24/gantt-chart/app/__init__.py のつもりなのであれば、"コードにコメント行を追加してエラーの行番号が変化するか?"あたりから調べるのがいいのでは)
kainet24

2024/03/28 14:49

コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
bsdfan

2024/03/29 03:26

pythonanywhere_com_wsgi.py で、21行目以降で dotenv による環境変数の設定をされていますが、それより前の 17行目で import app しているので、app/__init__.py がロードされるタイミングでは環境変数が設定されていないのではないでしょうか。 (が、__init__.py の load_dotenv() で読み込めるような気がするので、このあたりを確認してみてはどうでしょう)
guest

回答2

0

まず、.envファイルの内容を確認してください。SQLALCHEMY_DATABASE_URIが正しく設定されていることを確認します。 Strands NYT

SQLALCHEMY_DATABASE_URI=mysql://user:password@localhost/dbname
SECRET_KEY=your_secret_key

投稿2024/05/21 02:41

otisjame

総合スコア12

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

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

0

自己解決

.bashrcファイルにexport SQLALCHEMY_DATABASE_URI="hogehoge"を設定し、pythonanywhere_com_wsgi.pyに

python

1import os 2os.environ["SQLALCHEMY_DATABASE_URI"] = 'hogehoge'

を追加することで解決できた。

投稿2024/03/31 00:31

編集2024/03/31 00:34
kainet24

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問