こんにちは、ヘイ株式会社でエンジニアをしている id:hogelog です。 2021年6月に入社し CTO 室という部署に所属しつつなんだかあちこちの部署に首を突っ込むような役割をしています。まだ入社したばかりで把握してないものも多いですが、ビジネスの勢い、人の活気、やらなきゃいけないことばかりという雰囲気をとても楽しんでいます。 さてここは技術ブログ。なので技術の話をします。今回は STORES https://stores.jp/ec を支えるなかなか大きなモノリシック Rails アプリケーションのオートローダーを Zeitwerk へと切り替えた業務について紹介します。最新技術でもなく、Rails の設定項目の一つ Rails.application.config.autoloader の値を :classic から :zeitwerk に切り替えるというだけの地味な内容ですが、
この記事はRuby on Rails Advent Calendar 2019の13日目です。 インフルエンザにやられて完全に出遅れました。ごめんなさいごめんなさい。 Zeitwerkとは みなさん、定数解決してますか? Rails6から導入されたZeitwerk、旧来のconst missingを利用した仕組み(classic mode)で見られた困った挙動のほとんどを解決してくれる素晴らしいヤツですね。 クラスを定義しても定義しても一向に参照されず、星空見つめてすすり泣いたあの日はもう過去のもの 🎉 ここでは、Zeitwerkのドキュメント、およびコードリーディングを通じて気づいた、導入の注意点やTIPSなどを紹介してみたいと思います。 (検証環境) Ruby 2.6.5 Ruby on Rails 6.0.0 前提知識として、Rubyの定数解決の仕組みを多少理解していると良い・・か
Rakeタスクで並行処理をするとCircular dependency detected while autoloading constant エラーが出て困った話 背景 Rails4.2, ruby2.3系 集計のためにRakeタスクで並行処理を行う必要があった Parallelを採用し、並行処理を実装した Circular dependency detected while autoloading constant エラーが発生し困った 調べるとeager_load_paths設定しようって書いてあって、やったけど解決しなかった エラーの原因 1. Autoloadingはスレッドセーフじゃない マルチスレッド処理するとCircular dependency起こる。 ActiveSupport::Dependenciesあたりを参照 関連issue 関連stackoverflow 2.
Ginza.rb 第79回 Rails6の新しい定数自動読み込みZeitwerkのコードを読もう!に参加した。会場はメドピアさん。 ginzarb.doorkeeper.jp 表題のとおり今回は Zeitwerk がテーマ。余談だが自分は発音できないのでカタカナ読みでツァイトヴェルクと読んでいたが、それでも読みづらいので Rails コミュニティで略称として使われている zloader (ゼットローダー) の方で読んでいたりする。 オートローダーとは Rails で require を書かなくてもクラスが使える機構を支えているものだが、Ruby 標準の autoload を Rails が拡張した autoload が Rails 5.2 以前に択一だったもので、Rails 6 で追加されたオートローダーが Zeitwerk となる。従来のオートローダーは classic というもので A
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く