sugiii8's tech blog.
post: 2024-05-02
update: 2024-05-02
INDEX

Railsアプリケーションのメンテナンスをした

thumbnail

はじめに

クソネミダイアリー
こちらは以前作った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 でフォーマット指定すると怒られる
# 修正前 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

fly.io

  • いつの間にかサーバが2台になってた
  • いつのタイミング(初期作成時か、今回の作業時からか)不明だったのと、そもそも冗長構成取るほどのものではないので1台消す
  • CLIからdestroyした


最後に

今回ブログにまとめるにあたって、Githubのコミットログは当然としてChatGPTの会話ログも非常に役に立ちました。
早めにブログ纏めたのだけど、結構忘れていることも多い。特に細かいやつ。
そういうのも基本ChatGPTに一回相談するようにしておけば後で辿れるので便利だと思いました。

以上です。