首页 > 解决方案 > 无法加载命令 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

标签: ruby-on-railsherokuproduction-environment

解决方案


推荐阅读