相关疑难解决方法(0)

如何使用Rails 6 / Zeitwerk在Rails初始化程序中预加载问题?

我正在使用一个初始化程序,该初始化程序通过将一些应用程序关注点包含到第三方库中来对应用程序进行一些猴子修补。基本上:

# config/initializers/my_initializer.rb

class SomeExternalLib
  include MyConcern1
  include MyConcern2
end
Run Code Online (Sandbox Code Playgroud)

在Rails 5.2.3中可以正常工作,但是在升级到Rails 6时收到以下弃用消息:

声明警告:初始化会自动加载常量MyConcern1和MyConcern2。

不建议这样做。在将来的Rails版本中,初始化期间的自动加载将成为错误情况。

重新加载不会重新启动应用程序,因此初始化期间执行的代码不会再次运行。因此,例如,如果重新加载ApplicationHelper,则预期的更改将不会反映在该过时的Module对象中。

这些自动加载的常量已被卸载。

请查看“自动加载和重新加载常量”指南以获取解决方案。(从/Users/myuser/code/myapp/config/environment.rb:7调用)

我的担心在应用程序/控制器/问题/中。经过一番调查,我发现该路径没有被自动加载,但是我无法弄清楚如何使Zeitwerk(Rails 6的新自动加载器)动态地加载该路径。我尝试按照此处描述的STI自动加载模式进行操作,但是没有运气。任何想法如何解决此弃用警告?

ruby ruby-on-rails autoload ruby-on-rails-6

6
推荐指数
2
解决办法
996
查看次数

标签 统计

autoload ×1

ruby ×1

ruby-on-rails ×1

ruby-on-rails-6 ×1