You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Ruby on Rails项目到Heroku时启动崩溃问题排查

解决Rails部署Heroku时Zeitwerk::NameError导致的H10崩溃问题

这个问题的核心是Rails的Zeitwerk自动加载器严格要求文件路径与常量命名完全匹配,你的app/controllers/semesters/repositories_controller.rb文件没有正确定义Semesters::RepositoriesController常量,导致应用启动失败触发H10错误。以下是具体修复步骤:

  • 检查控制器类定义
    打开目标文件,确保类是嵌套在Semesters模块下的,格式必须符合:

    module Semesters
      class RepositoriesController < ApplicationController
        # 你的控制器逻辑
      end
    end
    

    注意模块名必须是首字母大写的复数Semesters,不能写成单数Semester或小写semesters。

  • 验证文件命名规范
    确认文件名是repositories_controller.rb(复数下划线格式),对应类名RepositoriesController(驼峰复数格式),不能是单数形式的repository_controller.rb。

  • 显式定义模块文件(可选但推荐)
    如果Semesters模块下还有其他控制器/模型,建议创建app/controllers/semesters.rb文件,显式定义基础模块:

    module Semesters
      # 可添加模块级逻辑,空文件也可以
    end
    

    这能避免Zeitwerk自动生成模块时的加载顺序问题。

  • 本地提前校验
    在本地执行Zeitwerk检查命令,提前排查所有命名匹配问题:

    rails zeitwerk:check
    

    确认本地无错误后,重新部署到Heroku:

    git add .
    git commit -m "Fix Zeitwerk naming mismatch for Semesters::RepositoriesController"
    git push heroku main
    
  • 排除其他加载干扰
    检查是否在其他文件中错误定义了顶级的RepositoriesController(不在Semesters模块下),导致命名冲突;同时确认config/application.rb中没有修改过config.autoload_paths或config.eager_load_paths,避免干扰Zeitwerk的默认加载规则。

内容的提问来源于stack exchange,提问作者user24416810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:52:49