Rails 7引擎初始化程序挂钩不工作



尝试让我的gem在Rails 7中工作。我已经确认它在Rails 6.1.4.1(最新版本(中有效。

在我的引擎的engine.rb文件中,我有这个。。。

module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
initializer "my_engine.include_controller" do |app|
ActionController::Base.send :include, MyEngine::MyController
end
end
end

当服务器启动或运行控制台时,我会。。。

uninitialized constant MyEngine::MyController (NameError)

我将gem控制器放在它们的命名空间目录中,并在Rails6.1中重申这一点。

我也尝试过这些变体,但都有同样的错误。。。

ActionController::Base.include MyEngine::MyController
ActiveSupport.on_load :action_controller_base do
include MyEngine::MyController
end

如果我把以下内容放在主应用程序的ApplicationController中,那么它就可以工作了。。。

include MyEngine::MyController

有人知道如何调用这些钩子吗?或者我应该把它作为一个bug报告给rails团队吗?

我能够通过将所需文件推送到autoload_once_paths配置来解决同样的问题。这里是一个可能的修复示例。

module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
config.autoload_once_paths << "#{root}/app/controllers"
initializer "my_engine.include_controller" do |app|
ActionController::Base.send :include, MyEngine::MyController
end
end
end

来源:

  • https://edgeguides.rubyonrails.org/autoloading_and_reloading_constants.html#config-自动加载一次路径
  • https://github.com/charlotte-ruby/impressionist/issues/305
  • https://github.com/hotwired/turbo-rails/blob/main/lib/turbo/engine.rb

相关内容

  • 没有找到相关文章

最新更新