Rails: Как успешно загружать константы с первой попытки без правильного пространства имен? - PullRequest
0 голосов
/ 19 апреля 2019

Мне нужна следующая файловая структура:

app/components/foo/foo.rb
app/components/foo/_foo.html.haml
app/components/bar/bar.rb
app/components/bar/_bar.html.haml

Где я могу получить доступ к различным классам следующим образом:

Components::Foo
Components::Bar

Сейчас, чтобы автозагрузка работала правильно, она имеетбыть структурированным / закодированным / доступным следующим образом (гипотетически согласно соглашению Rails):

Components::Foo::Foo
Components::Bar::Bar

Это не имеет смысла.Я хочу, чтобы ранее упомянутая файловая структура, потому что я хочу, чтобы мои классы были автономными вместе с любыми ресурсами / и т.д.принадлежащий им.Я знаю, что если файл ruby ​​попадет прямо внутрь app/components, все будет хорошо, но это означает, что у меня есть одна папка и один файл для отслеживания, вместо одной папки.Не очень приятно.

Теперь меня беспокоит то, что, как и в приведенном здесь сценарии: Rails не в состоянии автоматически загружать константу только с первой попытки , автозагрузка явно работает, но всегда только при2-я попыткаПоскольку он настолько систематичен, кажется, что можно настроить его так, чтобы он всегда работал с 1-й попытки.

Это единственное добавление, которое я сделал к application.rb:

config.eager_load_paths += Dir[Rails.root.join('app', 'components', '**/')]

Я знаю, что перезапуск сервера необходим в случае добавления новых каталогов / изменения существующей структуры каталогов, но это нормально, поскольку это происходит не очень часто.Очевидно, что изменение кода происходит очень часто, и хотя я могу постоянно обновлять страницу до тех пор, пока она не перезагрузит все константы, это очень расстраивает (и я даже не тестировал ее на производстве, но не будуудивляюсь, если он делает то же самое там при первой загрузке)с этим в любом случае, это все еще намного худшее решение, так как оно потребовало бы перезапуска сервера, если код был изменен (при условии, что требование выполняется в центральном месте, например в инициализаторе или в application.rb).

...