Rails:如何在没有适当命名空间的情况下首次成功自动加载常量?

时间:2019-04-19 15:34:56

标签: ruby-on-rails ruby autoload

我想要以下文件结构:

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 unable to autoload constant only on first attempt一样,自动加载显然可以正常工作,但始终仅在第二次尝试时有效。由于它是如此系统,因此感觉应该有可能对其进行正确配置,以使其始终可以进行第一次尝试。

这是我对application.rb所做的唯一添加:

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

我知道,如果添加了新目录/修改了现有目录结构,则必须重新启动服务器,但这很好,因为这种情况很少发生。修改代码显然经常发生,尽管我可以多次刷新页面,直到它重新加载所有常量为止,但是这非常令人沮丧(而且我什至没有在生产中进行测试,但是不会如果在第一次加载时执行相同的操作会感到惊讶。

我也知道您可以通过使用手动需求等来解决此问题,尽管我对此没有多大运气,但它仍然是次等的解决方案,因为它需要服务器如果修改了代码,则重新启动(假设要求是在中心位置完成的,例如在初始化程序或application.rb中完成)。

0 个答案:

没有答案