我在 rails 的 lib 文件夹中有一些模块,即:
/lib/myapp/lib/**
我正在开发它们,但是每次我都必须重新启动服务器。我在 SO 上遇到过许多不同的问题,但其中大部分都不是针对 rails 3.1
我目前有一个初始化程序可以执行此操作;
if Rails.env == "development"
lib_reloader = ActiveSupport::FileUpdateChecker.new(Dir["lib/**/*"], true) do
Rails.application.reload_routes! # or do something better here
end
ActionDispatch::Callbacks.to_prepare do
lib_reloader.execute_if_updated
end
end
if Rails.env == "development"
lib_reloader = ActiveSupport::FileUpdateChecker.new(Dir["lib/myapp/lib/*"], true) do
Rails.application.reload_routes! # or do something better here
end
ActionDispatch::Callbacks.to_prepare do
lib_reloader.execute_if_updated
end
end
有通用的方法吗?每次都必须重新启动服务器非常耗时!
最佳答案
去掉初始值设定项并在你的 application.rb 文件中放置以下行:
config.autoload_paths += Dir["#{config.root}/lib/**/"]
要注意的一件事是您的模块和类名称应遵循自动重载的命名约定。例如,如果你有文件 lib/myapp/cool.rb,那么你在 cool.rb 中的类/模块声明常量应该如下所示:
Myapp::Cool
如果你有文件 lib/myapp/lib/cool.rb 并且你希望它使用 Cool 作为类/模块名称而不是 Myapp::Lib::Cool 那么你的自动加载应该是这样的:
config.autoload_paths += Dir["#{config.root}/lib/myapp/lib/**/"]
只要您在开发模式下运行,rails 就会自动重新加载自动加载路径中的所有类/模块并遵循命名约定。
关于ruby-on-rails - 在 Rails 3.1 中重新加载 lib 文件而不重启开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852216/