WEBアプリをサーバにアップすると500番エラーになる。コードもパーミッションも間違いない。なのに動かない、そんな時にチェックして欲しいこと。

個人開発

タイトルそのまんまですが。

私は主にflaskなどでWEBアプリめいたものを作っています。こないだはherokuから某レンタルサーバへ、サービスをお引越ししました。

↓需要があるかわからないですがいちおう貼っておきます。pdfや画像ファイルなどに日付を入れるサイトです。

ファイルに日付を入れるWEBアプリ
ドラッグ&ドロップで、ファイルに現在の日時を入れることができます。利用無料。会員登録不要。使い方はかんたん。ファイルやプリントに記録を残す時にご利用ください。

その際、500番エラーが出てさんざん詰まった後で、思い出しました。そういえば数年前にherokuでも全く同じところでつまずいていたことを。

「ローカルで動かしてみて動くものが、サーバにアップすると(お手本の記事や入門書の通りにやっても)500番エラーになる」

結論から言うと、これの原因のほとんどは、ライブラリの不整合でした。

教訓

お手本通りにやって500番が出たらまず、ライブラリの依存・整合性をチェックすること。

これはたぶんflaskだけでなく、Djangoなども、さらにはRuby on Railsとか、他のあらゆる言語のフレームワークでも言えることだと思います。

500番エラーについて、どの記事にも(500番エラーの画面自体にも)「コードや.htaccessやパーミッションを見直しましょう」と書いてあるんですが、ライブラリの調整を面倒くさがってコードや.htaccessやパーミッションばかり見ていると、結構な時間を無駄にします。

そもそもコードはローカルでテストしているし、.htaccessやパーミッションは、私のような初心者ならなおさら、お手本に忠実にやっているはず。

ライブラリでもローカルではmodule not foundエラーが出て、いろいろ調整したりしてるんですがね…サーバにあげる時、なぜかそんなことを忘れて、バージョン指定せずに入れてしまう。こんな風に。

$ pip install Flask

とりあえずライブラリは、ローカルで動いた時と同じ全くバージョンを入れた方がいいと思います。

$ pip list

で確認するか、requirements.txtがあるならそれと同じバージョンを指定して。

$ pip install Flask==3.10

何でローカルでライブラリ入れる時、失敗してるのに、サーバ上げる時に忘れて、あまつさえ失敗に気づかないんですかね…「ローカルとサーバは違う」という悪い意味の油断が出てきてしまうのか。そんな自戒を込めて。

むかしスクールに通っていた頃なら講師に相談できたことも、今はひたすら試行錯誤です。おすすめのスクールはこちら。

コメント

タイトルとURLをコピーしました