Rails:自动加载引擎内lib目录中的文件

4

我正在开发一款基于Rails的应用程序,其中包含一个引擎,类似于子应用程序,可以为现有应用程序添加更多路由。

这个概念非常强大,感谢Rails。

但是我遇到了奇怪的挑战,在开发模式下自动加载引擎lib目录中的文件更改。每次我在引擎的app目录中进行更改,无论是模型还是控制器,都能够无缝运行,但是lib目录中的任何文件更改都没有被捕获。我能做些什么吗?谢谢你的帮助。

2个回答

5
根据 Rails::Engine 文档,您可以像这样自动加载路径——
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

如果您不想自动加载,可以使用 require 语句直接在您的类中引用文件-
require 'my_engine/my_object'
class MyModel < AR::Base
  ...
end

这将起作用,因为您的引擎已经加载到应用程序中,所以您可以访问其中的库。

建议使用 File.expand_path("../lib/some/path", FILE) 可以得到: - J Edward Ellis
据我所知,关于中间件的三行代码与OP的问题无关(它们只是文档中配置讨论的一部分)。在Rails 5中,我所需要的只是调整autoload_paths。值得注意的是,由于我的lib文件与engine.rb位于同一个文件夹中,因此我的路径只是../lib/some/path. - davew

-5
将以下代码放入您的config/application.rb文件中。
config.eager_load_paths += ["#{Rails.root}/lib"]

如果您只想在开发模式下使用此功能,请使用以下方法。
config.eager_load_paths += ["#{Rails.root}/lib"] if Rails.env.development?

问题是关于 Rails 引擎 而不是完整的 Rails 应用程序 - Swaps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接