我正在使用引擎处理这个rails应用程序,这是一种子应用程序,为我现有的应用程序添加了更多路径。
这个概念非常强大,多亏了rails。
但我面临着在开发模式下我的引擎lib目录中自动加载文件更改的奇怪挑战。每当我在引擎的app目录中进行更改时,无论是模型还是控制器,它都可以完美地工作,但是不会对lib目录下的任何文件进行任何更改。有没有办法可以做到这一点?谢谢你的帮助。
答案 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?