rails

Ruby on Rails

Rails7 + importmap + dartsass-rails

概要 Rails7のデフォルトでのアセットの管理がどの様になっているか知りたかったので rails newをしてみました。 既存プロジェクトを移行したときの差分はこちらです。 既存のソースコードの流用などがあるので変更を最小限にしたかったと...
Ruby on Rails

Rails 6.1.5でdb:migrationのときにreference周りでエラー

問題 rails db:migrateをしたときに、以下のようなエラーが出るようになってしまった。 親のキーがbigntで作られていないから、外部キーが貼れないというエラー。 Column `parent_id` on table `chi...
Ruby

AASMでステータス変更と同じクリティカルセクションで実行

概要 主にActiveRecordと併用して使うステータス管理用のgemがあります。AASM(ステートマシーン)です。「ステータス変更と同時に別の処理を実行したい」という要求を満たすために排他制御(主にデータベースのトランザクション)を使う...
Ruby on Rails

RSA Encryption not supported – caching_sha2_password plugin was built with GnuTLS support がでたときの対処法

原因 MySQL5.7までの認証プラグインにはmysql_native_passwordがデフォルトで使用されていましたがMySQL8より新たに追加されたcacing_sha2_passwordがデフォルトに変更されましたがクライアント側が...
Ruby on Rails

Rails + MySQL 8でngramを用いたfulltext index

Railsのmigrationで普通にfulltext indexを付ける場合には以下のようにすると思いますが、普通のfulltext indexではngramが使われないので日本語の全文検索をする場合には全然マッチしません。 class ...
Ruby on Rails

ActiveRecordでネストされたトランザクションのRollback方法

概要 ActiveRecordでトランザクションを入れ子にするケースがあり、ActiveRecordのトランザクションの処理を追ってみるとなかなか興味深かったので文章にまとめておきます。おそらく、この内容を知っておかないと排他制御を考慮した...
Ruby

Ruby on RailsでER図をモデルから生成

Railsの最新のER図をリバースエンジニアリングでスキーマから生成しましょう。rails-erdを使います。 docker container内でコピペでできるようにコマンドを列挙しておきます。 apt update apt-get in...
Ruby on Rails

物理メモリが不足したらpumaを自動で再起動

概要 pumaがどんどんメモリを食っていってしまう。同様に、sidekiqもたくさんメモリを食ってしまっている。GCしても減らない。 ObjectSpace.each_object(ActiveRecord::Relation).each(...
Ruby on Rails

Railsのroutesのshallowは安易に使わないで欲しい

概要 Shallowの説明はRails Guideにあるとおり。example normal: /authors/1/articles/1 shallow: /articles/1 (authorのIDはarticleのIDがわかれば自明だ...
Ruby

Railsで作ったREST APIをSwagger対応

背景 Web API Advent Calendar 12月3日分@takurosさんの12月2日のSwaggerとは何か? を前提としています。 概要 swagger-docs を使ってRailsのREST APIをswaggerで表示出...