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
相关产品推荐
相关产品推荐

