rails: autoload files inside engine's lib directory

你离开我真会死。 提交于 2020-06-25 21:33:08

问题


I am working on this rails application with an engine which is sort of sub application adding some more routes to my existing application.

The concept is so powerful, thanks to rails.

But I am facing this weird challenge to autoload file changes inside my engines lib directory in development mode. Every time I make a change inside app directory of engine be it model or controller , it works flawlessly, but no changes to any files under lib directory get's picked up. Is there a way I can do this ? Thanks for your help.


回答1:


According to Rails::Engine docs you can autoload paths like-

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

If you don't want to autoload, you can directly require the file in your class with the require statement-

require 'my_engine/my_object'
class MyModel < AR::Base
  ...
end

This will work because your Engine is already loaded in your app, so you can access libs inside of it.




回答2:


According to Rails::Engine docs you can autoload paths like-

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

This yields "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

This yields "my_engine/lib/some/path"




回答3:


Put the following code in your config/application.rb

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

If you want this only in development mode use the following

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


来源:https://stackoverflow.com/questions/37371729/rails-autoload-files-inside-engines-lib-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!