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

Rails 7.1 Dokku生产环境自定义生成器无法识别问题求助

Rails 7.1自定义生成器在Dokku生产环境无法识别的解决方法

在Rails 7.1中创建了自定义query生成器,开发环境运行正常,但部署到Dokku生产环境时,修复了Rails::Generators未初始化和Zeitwerk命名错误后,仍提示Could not find generator 'query',且zeitwerk:check无报错。以下是针对性解决步骤:

1. 严格匹配Zeitwerk命名空间与生成器类结构

由于文件路径为lib/generators/query/query_generator.rb,Zeitwerk要求常量必须嵌套在Generators::Query模块下,修改生成器代码为:

require 'rails/generators'

module Generators
  module Query
    class QueryGenerator < Rails::Generators::NamedBase
      source_root File.expand_path("templates", __dir__)

      # 你的生成器逻辑代码
    end
  end
end

2. 确保生产环境加载lib目录

Rails默认在生产环境不会自动加载lib目录,需在config/application.rb中添加:

# 针对Zeitwerk,生产环境推荐使用eager_load_paths
config.eager_load_paths << Rails.root.join('lib')

修改后重新部署,确保启动时lib目录下的代码被预加载。

3. 手动注册生成器到Rails

若Rails仍未自动发现生成器,可在生成器文件末尾手动注册:

Rails::Generators.add_generator(:query, Generators::Query::QueryGenerator)

或者创建lib/generators/query.rb文件统一注册:

require 'generators/query/query_generator'
Rails::Generators.add_generator(:query, Generators::Query::QueryGenerator)

4. 验证部署环境的文件与加载状态

  • 检查Dokku容器内文件是否完整:
    dokku run <你的应用名称> ls lib/generators/query
    
  • 再次验证Zeitwerk加载状态:
    dokku run <你的应用名称> RAILS_ENV=production bin/rails zeitwerk:check
    
  • 进入控制台手动加载生成器类,确认无错误:
    dokku run <你的应用名称> RAILS_ENV=production bin/rails c
    # 输入以下命令,若能返回类信息则加载正常
    Generators::Query::QueryGenerator
    

5. 排查命名冲突

运行以下命令确认生成器是否被列出:

dokku run <你的应用名称> bin/rails generate --help

若列表中无query生成器,说明未成功注册,需检查注册代码是否生效。

内容的提问来源于stack exchange,提问作者it's AndL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:15:07