post: 2024-05-02
update: 2024-05-02
INDEX ▶
Railsアプリケーションのメンテナンスをした
はじめに
クソネミダイアリー
こちらは以前作ったRailsアプリケーションです。
Hotwire周りと"ポストheroku"としてのfly.ioを試したかったので作成したものです。
初期リリース後、OpenAI APIを使って返信を作らせたりしました。
その後しばらくほっといたら、いつの間にか動かなくなっていたので調査及びバージョンメンテもした記録です。
メンテ前の状態
- Ruby: 3.2.2
- Rails: 7.0.1
Hotwire検証のためのRailsだったのでそれ程古いわけではないですが、個人開発なのでカジュアルにバージョン上げていこうと思いました。
やったこと
バージョンメンテ
各リストごとにテストを行いながら進めました。
テストと言っても超簡素な手動テストです。
- 一覧表示できる
- 投稿ができる
- 投稿結果が一覧に反映される
上記ができてれば表示・登録・Hotwire・Action Cableあたりは確認できてるので、まあいいかなと。
- 現状のRuby/Railsのバージョンでgemを一括updateした
- Railsのバージョンを7.1.3に上げる
- Rubyのバージョンを3.3.1に上げる
OpenAI API調査
本来は元々のバグであるこの問題を一番初めにやるべきだと思います。
が、どうせこっちも直るだろうと思ったので後回しにしました。
fly.ioデプロイ
flyコマンドも忘れかけてたので復習になりました。
発生したこと
バージョンメンテ時
- Mac ローカルのpostgresが動かない
Try re-running the command as root for richer errors.
Error: Failure while executing; `/bin/launchctl bootstrap gui/503 /Users/{userName}/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist` exited with 5.
- なんだかは分からなかったですが、とりあえずHomebrew経由で再度入れ直しで解消
- Railsのバージョン上げた際pumaが怒られる
Puma 5 is not compatible with Rack 3, please upgrade to Puma 6 or higher. (StandardError)
- エラーメッセージの通りpumaを6にあげて解消
- Railsのバージョンを上げた際にRackのバージョンも上がり、Rack 3だとpuma 5と互換性がない、という理解
to_s
でフォーマット指定すると怒られる- 元々非推奨になってたらしい
- 今回のバージョンメンテで切られた(と思われる)
- Rails7からActive Supportの一部のto_sメソッドにformatを指定するのがdeprecatedになった
# 修正前 viewファイルの一部
diary.created_at.to_s(:datetime)
---
# 修正後 viewファイルの一部
format_datetime diary.created_at
# 修正後 ApplicationHelper.rb
def format_datetime(datetime)
datetime.strftime("%Y-%m-%d %H:%M:%S")
end
- Rubyバージョン上げた際 hpricot で怒られる
- hpricot というgemが非推奨(メンテナンスされていないので)
- 使用箇所もhtml2slim というgemでdevelop環境に入っていたが、そもそも使ってなかったので削除
OpenAI API関連
Railsから ruby-openai
というgemでOpenAI APIにリクエストを投げていたが、そこでのエラー
- HTTP Status: 404
- HTTP Status: 401
- 404 -> 401 になった経緯は正直わかりません
- 401に関してはキーのmodelを
gpt-3.5
に変更して解消した - 元々はdavinciを使っていたが OpenAI APIリファレンスをみると、legacyに入っているので非推奨になったと認識した
- HTTP Status: 429
- 無料枠の期限切れ、もしくはチャージが無くなった場合にOpenAI API側がこのステータスを返す
- チャージを補填及び自動チャージ設定(月額の上限も確認しつつ)をした
- OepnAI APIのリファレンス - エラー コード 429
fly.io
- いつの間にかサーバが2台になってた
- いつのタイミング(初期作成時か、今回の作業時からか)不明だったのと、そもそも冗長構成取るほどのものではないので1台消す
- CLIからdestroyした
最後に
今回ブログにまとめるにあたって、Githubのコミットログは当然としてChatGPTの会話ログも非常に役に立ちました。
早めにブログ纏めたのだけど、結構忘れていることも多い。特に細かいやつ。
そういうのも基本ChatGPTに一回相談するようにしておけば後で辿れるので便利だと思いました。
以上です。