ruby-on-rails - 无法加载命令 Puma: NameError: Wrong Constant Name 'Model-Names' Copy
问题描述
刚刚部署到 Heroku 并成功迁移了 db。但是网站因错误而崩溃,说有“NameError:错误的常量名称公司副本”,我有一个公司模型。
使用 Rails 6.0.0.rc1 Ruby 版本 2.6.3
检查整个代码并确认我没有使用复数“公司”名称初始化任何内容。
已经检查过博客和stackoverflow...没有特定的方法来识别这个问题。
2019-07-15T03:39:08.124899+00:00 heroku[web.1]: Starting process with command `bundle exec puma -p 28862`
2019-07-15T03:39:10.206749+00:00 app[web.1]: Puma starting in single mode...
2019-07-15T03:39:10.206793+00:00 app[web.1]: * Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
2019-07-15T03:39:10.206795+00:00 app[web.1]: * Min threads: 5, max threads: 5
2019-07-15T03:39:10.206797+00:00 app[web.1]: * Environment: production
2019-07-15T03:39:14.734930+00:00 app[web.1]: ! Unable to load application: NameError: wrong constant name Companies copy
2019-07-15T03:39:14.735052+00:00 app[web.1]: bundler: failed to load command: puma (/app/vendor/bundle/ruby/2.6.0/bin/puma)
2019-07-15T03:39:14.735115+00:00 app[web.1]: NameError: wrong constant name Companies copy
2019-07-15T03:39:14.735118+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:679:in `const_defined?'
2019-07-15T03:39:14.735120+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:679:in `cdef?'
2019-07-15T03:39:14.735122+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:597:in `strict_autoload_path' 2019-07-15T03:39:14.735124+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:574:in `autoload_for?'
2019-07-15T03:39:14.735126+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:488:in `autoload_subdir'
2019-07-15T03:39:14.735128+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:477:in `block in set_autoloads_in_dir'
2019-07-15T03:39:14.735130+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:649:in `block in ls'
2019-07-15T03:39:14.735132+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:646:in `foreach'
2019-07-15T03:39:14.735134+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:646:in `ls'
2019-07-15T03:39:14.735136+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader.rb:463:in `set_autoloads_in_dir'
2019-07-15T03:39:14.735138+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader/callbacks.rb:65:in `block in on_namespace_loaded'
2019-07-15T03:39:14.735139+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader/callbacks.rb:64:in `each'
2019-07-15T03:39:14.735141+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader/callbacks.rb:64:in `on_namespace_loaded'
2019-07-15T03:39:14.735142+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader/callbacks.rb:50:in `block in on_dir_autoloaded'
2019-07-15T03:39:14.735144+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader/callbacks.rb:37:in `synchronize'
2019-07-15T03:39:14.735145+00:00 app[web.1]: /app/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.1.8/lib/zeitwerk/loader/callbacks.
希望任何有类似经验的人至少可以指出我在哪里寻找解决或进一步剖析这个问题。
非常感谢。
更新:
找到了一个快速修复。引发错误的原因是使用 zeitwerk 自动加载,这是 rails 6 的默认自动加载器。
我还没有找到出现 NameError 的原因。因此,在 application.rb 文件中,我将自动加载恢复到版本 6 之前用于 rails 的经典版本。之后一切顺利。
config.load_defaults "6.x"
config.autoloader = :classic
解决方案
推荐阅读
- vue.js - VeeValidate,确认规则不适用于 ValidationProvider
- javascript - 在 Vue js 中访问父级关于子事件的数据
- linux - 获取找到的文件的目录 - Bash
- javascript - 从访问日志中查找与函数具有相同值的单元格
- json - 使用 Marshmallow 的 JSON 序列化 - 跳过无属性
- java - 尝试使用 jtextfield 捕获异常?
- django - 覆盖Django中的默认路由方法
- javascript - 从 Photoshop jsx 脚本开始“自由变换”
- python - 如何使用 python 读取在 Azure Notebook 中打开的文件对话框选择的文件?
- javascript - 使用 Enzyme 和 Jest 无法通过“ul”中没有“li”的测试