通常我在config/application.rb中添加以下内容来添加autload_paths:
config.autoload_paths += Dir[Rails.root.join('app', 'poros', '{**}')]
Run Code Online (Sandbox Code Playgroud)
如何在引擎中实现相同的目标?它似乎在我在主机应用程序中的application.rb中使用相同的代码时工作,但是我认为代码不在引擎中并且需要添加到主机应用程序以使事情有效是很难看的.
我发现通过引擎添加加载路径的唯一解决方案是将其添加到lib/engine/engine.rb:
config.to_prepare do
Dir.glob(Rails.root + "../../app/poros/**/*.rb").each do |c|
require_dependency(c)
end
end
Run Code Online (Sandbox Code Playgroud)
然而,这似乎有一些根本性的错误,因为这会在我进行控制台重新加载时导致问题(例如,它告诉我已经定义了常量或者关注点无法执行包含块两次)
在引擎本身中执行此操作的正确方法是什么?(不敢相信这是如此艰难/不常见,我真的google了很多,但我找不到解决方案)
根据Rails :: Engine文档,您可以在Railtie中添加自动加载路径,如下所示:
class MyEngine < Rails::Engine
# Add a load path for this specific Engine
config.autoload_paths << File.expand_path("../lib/some/path", __FILE__)
initializer "my_engine.add_middleware" do |app|
app.middleware.use MyEngine::Middleware
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2906 次 |
| 最近记录: |