Just do IT

思うは招く

【Rails】rails_adminアップデート時にUglifierでassets precompileエラー

結論

rails_admin gemを3.0.0 から 3.1.1にアップデートするときにuglifierでアセットのプレコンパイルが通らないエラーが出た。

Uglifier::Error:
assets precompilation failed.

結論としては、uglifierがES6に対応してないためプレコンパイルが通らなかった。terserに置き換えたら解決した。

gem terser

経緯

まず、uglifierはもうメンテされてない。最終コミットが2021年9月だ。

github.com

そして、READMEにも「ruby-terserのほうが良い選択だよ」と書かれている。

UglifyJS only works with ES5. If you need to compress ES6, ruby-terser is a better option.

まんま書いてるけど、uglifierはES5にしか対応していない。なのでterserを使う。

configに

config.assets.js_compressor = Uglifier.new(harmony: true)

を記述していたが、これでもダメだった。

terser gemをbundle installし、config/environments/production.rbに以下を記述。

config.assets.js_compressor = Uglifier.new(harmony: true) # 削除
config.assets.js_compressor = :terser # 記述

無事プレコンパイルが通るようになりました。

以下の記事を参考にさせていただきました。感謝。

【Rails】uglifierはterserに置き換えた方がいいかもな話 - Qiita

新たに作成したファイルもgit stashするには-uオプションをつける

普通にgit stashするとそのとき新しく生成したファイルはstashされない。

そういう場合は-uオプションをつけるでOK。

git stash save -u 'some message'
❯ git stash save -help
usage: git stash save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
                      [-u|--include-untracked] [-a|--all] [<message>]

    -k, --keep-index      keep index
    -S, --staged          stash staged changes only
    -p, --patch           stash in patch mode
    -q, --quiet           quiet mode
    -u, --include-untracked
                          include untracked files in stash
    -a, --all             include ignore files
    -m, --message <message>
                          stash message

Railsでenum使用時にwhereで複数条件でデータ取得したい

たとえば、usersテーブルのroleカラムから、「student」と「parent」に該当するレコードを引っ張りたいとき。

以下のように書ける。

User.where(role: %i[student parent])

%i[student parent]の部分は文字列で

User.where(role: ['student', 'parent'])

のようにも書くことができる。しかし実際の現場だとこういった場合ではシンボルを利用することが多いと思うので、%i[]を使えばいいと思う。たぶんRubocopにもこう書けと叱られるはず。