Rails cache_classes должен быть отключен для загрузки новых классов - PullRequest
0 голосов
/ 10 апреля 2020

В моем приложении Rails у меня есть несколько классов в папке /lib:

/lib/ems
/lib/ems/client.rb
/lib/ems/credentials.rb
/lib/ems/v2/base.rb
/lib/ems/v2/policy.rb

И все классы автоматически загружаются в мое приложение с помощью:

config.autoload_paths += Dir["#{config.root}/lib/**/"]

Если я вызываю: Rails.application.instance_variable_get(:"@_all_autoload_paths")

Я ясно вижу, что все мои классы загружаются правильно, и они отлично работают в процессе разработки.

Однако, когда в среде без разработки я получаю NameError undefined constant для некоторых из классы в моей папке /lib (не все, только некоторые).

Что я заметил, так это то, что если отключить кэширование классов следующим образом:

config.cache_classes = false

Тогда эти классы будут работать нормально и могут использоваться без каких-либо проблем ... так что, похоже, проблема не в автозагрузке, а скорее в кешировании ...

Если я снова включу cache_classes затем он сразу завершается ошибкой.

Как я могу сделать так, чтобы Rails мог видеть эти классы без необходимости выключать это?

1 Ответ

1 голос
/ 10 апреля 2020

Вам также необходимо добавить каталог в eager_load_paths.

config.autoload_paths += Dir["#{config.root}/lib/**/"]
config.eager_load_paths += Dir["#{config.root}/lib/**/"] 

См. Не забывайте о eager_load при расширении путей автозагрузки от Arkency для превосходного (хотя и несколько устаревшего) изложения деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...