加载Rails应用遇ActionView模板错误:未初始化常量EXPR_ARG
这个ActionView::Template::Error at / uninitialized constant ActionView::CompiledTemplates::EXPR_ARG错误我之前碰过几次,大概率是HAML和你的Rails版本不兼容导致的——毕竟你贴的application.html.haml代码里根本没直接用到EXPR_ARG这个常量,肯定是编译环节出了问题。
给你几个亲测有效的解决步骤:
先检查HAML和Rails的版本匹配度
不同版本的HAML对Rails有明确的版本要求,比如HAML 6.x得搭配Rails 5.2及以上,旧版HAML在新Rails上很容易出这种内部常量找不到的问题。你可以直接在Gemfile里锁定兼容的版本,比如如果你用的是Rails 6.x,就把HAML指定到~> 6.1这个范围,然后跑bundle update haml更新依赖。清掉模板缓存试试
Rails会把编译后的模板存在缓存里,有时候缓存文件损坏也会触发这种莫名其妙的错误。直接跑这条命令清缓存:rails tmp:clear清完之后重启服务器,再加载应用看看。
排查渲染的局部模板
错误虽然指向主布局,但问题可能藏在你渲染的common/html_head局部模板里。去检查这个模板有没有语法错误,或者是不是不小心写了EXPR_ARG这类未定义的常量(比如手滑打错了变量名)。换个HAML版本试试
如果上面的方法都不管用,那就直接换个HAML版本试试——比如当前用的是6.x,就降级到5.2.2;要是用的旧版本,就升级到最新稳定版。改完Gemfile记得跑bundle install,再重启服务。
举个具体的Gemfile修改例子:
# 替换原来的gem 'haml'行 gem 'haml', '~> 6.1.0'
要是还是搞不定,建议对照HAML的官方文档确认下你的Rails版本和HAML的兼容情况,或者搞个空白的新Rails项目,只加HAML依赖,看看能不能复现问题,这样就能排除项目里其他依赖的干扰了。
内容的提问来源于stack exchange,提问作者jj008

