今日のPython 第28回「家計簿ページをpythonanywhere にデプロイ 」

2025年1月5日日曜日

Python Python_WEBアプリ編 公開

t f B! P L
 作成:2025/1/5
W011

はじめに

今、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のライブラリをインポートするプログラムにしましたので

コンソールから、インストールしてみました。



pip install python-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アプリのデプロイにあたり、エラーがでて苦労した点を紹介しました。

自分の備忘録として残しておくとともに、同様のエラーに出くわした方の参考になれば、幸いです。







このブログを検索

アーカイブ

カテゴリー

QooQ