gpt4 book ai didi

ruby-on-rails - 升级到 Rails 6 时,是否有一种编程方法可以检测 Zeitwerk::NameError?

转载 作者:行者123 更新时间:2023-12-04 16:26:02 25 4
gpt4 key购买 nike

我目前正在将旧的 Rails 应用程序迁移到 Rails 6。
好像项目中有些文件和里面定义的类不一致。
运行应用程序测试时我没有看到此错误,但在部署后我收到如下错误:

 Zeitwerk::NameError: expected file /app/my?_/app/lib/multi_io.rb to define constant MultiIo, but didn't
在以前的 SO 问题中,我可以找到以下建议:
  • Rails 6: Zeitwerk::NameError doesn't load class from module套装config.autoloader = :classic
  • How to ignore a folder in Zeitwerk for Rails 6?忽略给定路径
  • Autoloading and Zeitwerk Mode in Rails 6微调 config.autoload_path

  • 我不是在寻找解决方法,所以我更正了引发异常的文件。
    我想找到一种编程方式来检测所有不一致的路径/类名,而无需在生产模式下运行应用程序。
    到目前为止,我想到了三个选项:
  • 用于验证自动加载的 rake 任务(即 not provided by the gem)。它存在吗?你有一个片段可以从开发环境中的 rails 控制台运行吗?
  • rubocop 警察或其他静态代码分析器。有吗?
  • 在测试环境中强制急切加载

  • 在不需要多次迭代/部署的情况下验证我的代码的建议方法是什么?
    非常感谢你提前

    最佳答案

    您可以使用 zeitwerk::check 检查项目的自动加载兼容性。任务:

    $ bin/rails zeitwerk:check
    Hold on, I am eager loading the application.
    All is good!
    它会执行所有自动加载路径,并将标记一些问题,例如由常量名称推断中的更改(例如具有首字母缩写词的那些)引起的问题。除了在升级指南中,该任务似乎没有被广泛宣传或记录。但是,我实际上有时会使用它来清除项目中的常量命名问题(即,类与文件不匹配的地方)。

    关于ruby-on-rails - 升级到 Rails 6 时,是否有一种编程方法可以检测 Zeitwerk::NameError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63927795/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com