すがすがしい秋涼の候🍂
みなしゃまいかがお過ごしでしょうか?
先日公開したWEBアプリ↓ 本体部分はFlaskで作ってましゅ
inugamisimulator.s324.xrea.com
お借りしているサーバーはタイトル通りXREAサーバーさん
"無料レンタルサーバー Python"で検索して、どうやらPythonを動かせるっぽい!と選びまちた
このFlaskアプリ×XREAサーバー、SSLとかCGIとかApacheとかパーミッションとかSSHとかFTPとかWSGIとかシバンとかとか・・・インターネットのことを全く分かってないド素人が動かすにはなかなかの曲者でちた
ローカルで動かしてた時は簡単だったのにᐡ- ̫ -ᐡ。 flask run カタカタッターンッ!
以下、アプリ完成から公開までの四苦八苦を記録しておきましゅ
仮想環境の構築とライブラリのインストール
ユーザーにはXREAサーバーに直接Pythonライブラリをインストールする権限は無いため、Flaskを利用するためには仮想環境(pyenv)を構築する必要がありましゅ
ChatGPTに手取り足取り教えてもらいながら環境構築
ホームディレクトリでpyenvを作成した場合、シバンは↓
#!/virtual/XREAユーザー名/pyenvの名前/bin/python
View function mapping is overwriting an existing endpoint function: index問題
仮想環境を構築して main.py を実行した際に出たエラー
@app.route()デコレーターのエンドポイントの名前が重複してると発生するエラーとのこと
ChatGPTに相談してindex関数の名前を別のものに変更するも改善せず₍ᐢ-᷅.̫-᷄ᐢ₎
ローカルで実行していた時は __init__.py でflaskアプリの初期化をして main.py を呼び出す形にしていたんでしゅが、 __init__.py の import main の部分で main.py のコードが二度読み込まれている可能性があるとのことで __init__.py の内容を main.py に統合して main.py 内でFlaskを起動するようにしたらエラーは出なくなりまちた
弊社のApacheにはmod_wsgiは組み込まれておりません。
InternalServerErrorに苦しんでいる最中、エラーコードの問い合わせへの回答の中でサポートの方が教えてくれた現実(´・ω:;.:... wsgi.pyからのアプリ起動は不可能
uWSGIはApache側でのプロキシ設定が出来ないため利用できず
FastCGIについてはサポートの方から"PythonをFastCGIで実行は仕様上不可となっております。"と教えていただきまちた
ということでCGIを利用して実行する手段へ
もしかして、レンタルサーバーでFlaskアプリを動かす場合、CGIを経由するのが常識・・・?
謎の</body></html>
CGI方式に移行してやっとページが表示されるようになったものの、JavaScript が動かない⤵️
Responseの内容を確認すると、JavaScript コードの末尾に元のコードには無い謎のHTMLタグ</body></html>が付いて返ってきている・・・₍ᐢ-᷅.̫-᷄ᐢ₎ナニコレ?
url_forを使ってscript.jsを呼び出してたんでしゅが、試しに直接パスを指定して呼び出す形にしたらうまくいったので、url_forが悪さしてたのかも
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
⇒ <script src="/static/js/script.js"></script>
cssファイルはurl_forで呼び出せてるのになぁ
あとは文字コードはBOM無しUTF-8、改行コードはLFで保存するとかパーミッションの設定とか細かいところでも躓きまくりながら、結局、公開まで半月かかりまちた
ファイルをサーバーにアップすれば即動くなんて幻想を抱いた甘ちゃんだったわたぴはもう居ない・・・!