Categories
├─Books Cloud services Events Standard TechTips Others
├─Software
│ ├─Mac OS Programming languages Windows Others
│ ├─Libraries
│ │ └─C C++ Java JavaScript Python Ruby Rust Others
│ └─Unix
│ └─Unix commands Others
└─Web
└─Document Service Others
ActiveRecord::Rollbackで例外を伝播させずにロールバック後の処理を継続する
Active RecordのTransactionブロック内で例外が投げられた場合、ActiveRecord::Rollback以外の例外はロールバックの後に再度投げられます。
したがって、処理失敗で例外を投げるメソッド(
save!等)を使えば、基本的にその例外はロールバックの後Transactionブロックの外へ伝播します。 これをキャッチしなければ、RailsはHTTPのエラーレスポンスをブラウザ等のクライアントに返します。 つまり、「処理に失敗したら、ロールバックして、あとの処理は切り上げて、エラーレスポンスを返す」という挙動は簡単に実装できます。一方で、「ロールバック後に例外を出さずに処理を継続する」場合には、ActiveRecord::Rollbackを活用できます。 以下は、Transactionの成否でリダイレクト先を変えるコード例です。
【小ネタ】Hash#mergeはキーワード引数でも動作する
RubyのHash#mergeのマニュアルでは、 その引数はハッシュとしか書かれていません。 例えば、以下のような形です。
では、キーワード引数を渡すとどうなるのかと言うと、以下のように動きはしますよ、という小ネタです。
Rubyの言語仕様上OKなのかは不明ですので、自分から積極的に使うというよりは、 他人のコードを読むときに役立つかもしれない小ネタ知識でした。
minitest6にアップデートするとrails testがエラーになる
1/9にリリースされたRails v8.1.2は、minitest6で問題なさそうです。簡単にテストした分には、正常にテストが走りました。
ちなみにv8.1.1は、minitest6にすると、エラーにはならないものの、テストが全く拾われず
0 runs, 0 assertions, 0 failures, 0 errors, 0 skipsになっていました。WSLのUbuntu 24.04においてGUIアプリの起動が遅い場合はWSLの更新で解決します。
WSLでUbuntu 24.04の利用を始めてから、 一部のGUIアプリ(meldなど)の起動に異常に時間がかかる問題にずっと悩まされていました。 本日以下のようにコマンドプロンプトで
wsl --updateを実行して、この問題がやっと解決しました。なお、この問題に対する修正は WSL2.5.1で導入されたそうです。
参考情報
シェルスクリプトで壊さずに全ての引数を別コマンドに引き渡す書き方
基本はダブルクォーテーション付きの
"$@"シェルスクリプトに渡された全ての引数を、そのシェルスクリプト内で別のコマンドに引き渡す場合は
"$@"を使います。 例えば、以下のように記述します。"$*"や$@(ダブルクォーテーションなし)を使うと、'foo bar'のようなスペースを含む引数がスペースで分割されて壊れてしまいます。shコマンドに渡すときは
sh -c '..."$@"...' -- "$@"1つの実行コマンドしか受け付けない
sudoやssh、docker runなどで、 複数コマンドの実行などの複雑な処理を行いたいときに活躍するのがsh -c '...'です。シェルスクリプト内で
sh -c '...'にすべての引数を渡したいときは、sh -c '..."$@"...' -- "$@"と記述します。 例えば、以下のように記述します。先頭のいくつかの引数を取り出して残りを渡す場合(おまけ)
検索ワードのような「固定の引数」と、複数のファイルのような「可変長の引数」が混在しているケースです。 これらをまとめて
sudoやssh、docker runなどに投げたい場合は、-cオプションの文字列内でshiftを使います。以下は、第一引数が検索文字列、第二引数がその検索文字列を置き換える先の文字列、 第三引数以降はこの検索と置換の対象となるファイル(複数個指定可)となっている例です。
minitest6にアップデートするとrails testがエラーになる
現象
2025/12/18にリリースされたminitest 6.0.0のgemにアップデートしたところ、
bin/rails testの実行で以下のエラーが発生して止まりました。ちなみに、テストが1つも無い状態ではこのエラーは発生しませんでした。とりあえずの回避策
Gemfileの
group :testのところに以下の記述を追加してminitestのバージョンを6よりも下に設定したところエラーは出なくなりました。SprocketsからPropshaftへの移行に関する注意点
Propshaftへ移行したらSprockets用の設定は削除可能
config/environments/production.rbにある以下の設定はSprocketsの設定なので、 Propshaftへ移行したら、削除可能です。参考情報
https://www.techtips.page/ja/comments/658
SprocketsからPropshaftへの移行に関する注意点
Propshaftは.erbを処理しない
Sprocketsは拡張子が
.erbのファイル(例:foo.scss.erb)を処理しますが、Propshaftは処理しません。 そのため、Sprockets で.erbを処理している場合、Propshaftへ移行するには次のいずれかの対応が必要になります。.erbの利用をやめ、プレーンなCSS/SCSSなどに書き換える.erbの処理を、Propshaftに渡す前の前処理として別途組み込むSprocketsからPropshaftへの移行に関する注意点
Propshaftへの移行に際して、tailwindcss-railsまたはdartsass-railsを選ぶのもあり
Propshaftの公式移行手順では、CSS関連の処理が必要な場合の選択肢として cssbundling-rails のみ紹介されていますが、 tailwindcss-rails と dartsass-rails という選択肢もあります。cssbundling-railsのREADMEには、選び方のヒントが掲載されています。
SprocketsからPropshaftへの移行に関する注意点
SprocketsからPropshaftへの移行手順は、 以下のPropshaftの公式手順で基本的には問題ないと思いますが、 この公式手順に記載されていないものを中心に、 移行における注意点をこのTopicで集約できればと思います。
https://github.com/rails/propshaft/blob/main/UPGRADING.md