rails:在引擎的lib目录中自动加载文件

时间:2016-05-22 07:36:12

标签: ruby-on-rails autoload rails-engines

我正在使用引擎处理这个rails应用程序,这是一种子应用程序,为我现有的应用程序添加了更多路径。

这个概念非常强大,多亏了rails。

但我面临着在开发模式下我的引擎lib目录中自动加载文件更改的奇怪挑战。每当我在引擎的app目录中进行更改时,无论是模型还是控制器,它都可以完美地工作,但是不会对lib目录下的任何文件进行任何更改。有没有办法可以做到这一点?谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

根据Rails::Engine docs,您可以自动加载路径,例如 -

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

这样做是因为您的引擎已经加载到您的应用中,因此您可以访问其中的库。

答案 1 :(得分:0)

根据Rails::Engine docs,您可以自动加载路径,例如-

class MyEngine < Rails::Engine
  # Add a load path for this specific Engine
  config.autoload_paths << File.expand_path("../lib/some/path", __dir__)

  initializer "my_engine.add_middleware" do |app|
    app.middleware.use MyEngine::Middleware
  end
end

这将产生“ my_engine / lib / my_engine / lib / some / path”

class MyEngine < Rails::Engine
  # Add a load path for this specific Engine
  config.autoload_paths << "#{config.root}/lib/some/path"

  initializer "my_engine.add_middleware" do |app|
    app.middleware.use MyEngine::Middleware
  end
end

这将产生“ my_engine / lib / some / path”

答案 2 :(得分:-2)

将以下代码放入config/application.rb

config.eager_load_paths += ["#{Rails.root}/lib"]

如果您只想在开发模式下使用,请使用以下

config.eager_load_paths += ["#{Rails.root}/lib"] if Rails.env.development?