Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rails 6.0 x zeitwerk の環境において units_directory_path が固定されてしまう場合がある #71

Open
aqla114 opened this issue Jul 4, 2023 · 2 comments

Comments

@aqla114
Copy link

aqla114 commented Jul 4, 2023

背景

cookpad_all では Rails 6.0 で zeitwerk を使っている状況で Chanko を使っています。
また Chanko::Config の設定については config/initializers 以下に Chanko 用のファイルを用意してそこで各種値を設定しており、そこで unit を置くディレクトリを Chanko::Config.units_directory_path = "app/extensions" で変更しています。

問題

上で設定した units_directory_path が反映されず、デフォルトである app/units で固定されてしまいます。

原因

Chanko::Config は一度 units_directory_path を読み出そうとしたタイミングで現在の @units_directory_path の値をキャッシュしています。

def units_directory_path
@resolved_units_directory_path ||= Rails.root.join(@units_directory_path).to_s
end

また、zeitwerk 環境下では以下のコードにより before: :set_autoload_paths のタイミングで Chanko::Loader.prepare_eager_load が呼び出されます。これは initializers 以下のコードが実行されるよりも前のタイミングです。

initializer("chanko.zeitwerk.prepare_eager_load", before: :set_autoload_paths) do |app|
# zeitwerk freezes autoload_paths after :set_autoload_paths.
# So we need to prepare before set_autoload_paths
Chanko::Loader.prepare_eager_load(mode: :zeitwerk)
end

この prepare_eager_load の中で Chanko::Config::units_directory_path が読み出されているんですが、その時点ではまだ units_directory_path がデフォルト値なのでそちらの値でパスが固定されます。

Rails.autoloaders.main.collapse(Chanko::Config.units_directory_path + '/*')

確認したいこと

  • この仕様は意図したしようでしょうか。
  • もし意図した挙動であれば少しハマりやすいポイントなので、以下のような対応をしたいです。
    • ドキュメントにパスの設定は initializers ではなく application.rb や environment などに書くことを記述する。
    • @resolved_units_directory_path に一度値が入ってしまった場合、 @units_directory_path にいくら値を入れても Chanko で利用するパスは変更できないので、units_directory_path=(path)@resolved_units_directory_path が nil でないときに例外を吐くなどをしたい。
  • もし意図していない挙動であればちょっと修正方針を考えたいです。
@eudoxa
Copy link
Contributor

eudoxa commented Jul 5, 2023

ありがとうございます。意図通りではないのでバグです。着手に少し時間がかかると思いますが、状況を理解し対応方法を考えます。

@aqla114
Copy link
Author

aqla114 commented Jul 5, 2023

ありがとうございます!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants