はじめに
今、PythonでWEBアプリの作成を進めています。少しづつ機能を追加して、ローカルの仮想環境で動作確認をするという作業を地道に行っている状況です。
そして、進捗がある都度、このブログで紹介しています。
前回までの状況
前回までに、WEBアプリで家計簿のページを作成し、仮想環境で、動作確認を行っています。現在下の画面のような表示になっています。
■現在のWEBアプリ画面■

今回実施すること
この状態でWEBサイトに公開したら、正常に動作するか、確認のために、実際にサーバーにデプロイしてみます。
デプロイ(deploy)とは、システム開発において、アプリケーションやソフトウェアをサーバー上に配置して利用できるようにする作業です。
WEBサイトにデプロイ
デプロイするサーバーには、以前、立ち上げた「pythonanywhere」を使用します。
サイトの立ち上げについてはこちらの関連記事を参考にしてください。→参考
今回は、WEBアプリのデプロイにあたり、エラーがでて苦労した点を紹介します。
エラー対応①
アップロードして、実行すると
「pythonanywhere」のコンソール上にこのようなエラーが表示されました。
2025-01-04 22:52:45,841: Error running WSGI application
2025-01-04 22:52:45,842: ModuleNotFoundError: No module named 'ulid'
2025-01-04 22:52:45,843: File "/var/www/newrongo555_pythonanywhere_com_wsgi.py", line 23, in <module>
2025-01-04 22:52:45,843: from main import app as application # noqa
2025-01-04 22:52:45,843:
2025-01-04 22:52:45,843: File "/home/newrongo555/UPLOAD/main.py", line 12, in <module>
2025-01-04 22:52:45,843: from ulid import ULID #--- 追加10-3 # ULIDクラスをインポート
内容を見てみると、原因は、ライブラリがインストールされていないことにありそうです。
前回、ULIDのライブラリをインポートするプログラムにしましたので
コンソールから、インストールしてみました。
インストール後、再度プログラムを実行したのですが、解消しません。
まだ、「pythonanywhere」の仕組みをよく理解できていないので、自分で作成した、立ち上げ時の記事を読み返しながら、原因をよく考えてみました。
すると、「pythonanywhere」上でも仮想環境を利用していることに、気づき、次の方法を試してみました。
Dashbord(トップ画面)の右端にある
All Web apps から
Virtualenv: のコンソールを開き、
pip install
でライブラリをインストールしてやります。
追加で、4つのライブラリをインストールしました。
pip install python-ulid
pip install ulid
pip install flask-login
pip install flask_sqlalchemy
これで解消しました。
と思ったら、新たなエラーが。
エラー対応②
次は、コンソール上にこのようなエラーが表示されました。
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user
[SQL: INSERT INTO user (username, password) VALUES (?, ?)]
[parameters: ('zzz', '111')]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
データベースが見当たらない、と言っているようです。
以前にもローカルの仮想環境上で同様のエラーが発生したことがありました。
このときは、データベースであるuser_flask.db ファイルの置き場を変えることでエラーが解消しました。(関連記事→
参照)
今回は、プログラム上で、データベースファイルまでの絶対パスを指定する方法で解消しました。
■main.py■
# ------------------------------------------------------------------------------ #
# ユーザーDBの作成
# ------------------------------------------------------------------------------ #
# app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user_flask.db'# 修正前
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////home/newrongo555/instance/user_flask.db' #--- 修正11
■説明等■
このようにSQLALCHEMY_DATABASE_URIに絶対パスを指定することで解消しました。
おわりに
以上、今回は「pythonanywhere」へのWEBアプリのデプロイにあたり、エラーがでて苦労した点を紹介しました。
自分の備忘録として残しておくとともに、同様のエラーに出くわした方の参考になれば、幸いです。
0 件のコメント:
コメントを投稿