可以参考 Rails 对 I18n yml 文件是如何加载的。
# 定义。这里的 paths 表示你要监视的文件或目录(所在的路径)。
i18n_reloader = ActiveSupport::FileUpdateChecker.new(paths) do
I18n.reload! # 监视内容有变化时,执行什么操作。
# Rails.application.reload_routes!
end
ActionDispatch::Reloader.to_prepare do # to_prepare 的作用,可参考对应说明。
# 调用。如果有更新,则执行操作
i18n_reloader.execute_if_updated
end
# 调用。手动执行操作
i18n_reloader.execute
我们用的是 services/*.rb 和 services/views/ 文件、目录。供参考:
if Rails.env.development?
# .rb 文件
lib_ruby_files = Dir.glob(Rails.root.join("app/services/**/*.{rb}"))
lib_ruby_reloader ||= ActiveSupport::FileUpdateChecker.new(lib_ruby_files) do
Rails.application.reload_routes!
lib_ruby_files.each do |lib_file|
silence_warnings { require_dependency(lib_file) }
end
end
Rails.application.reloaders << lib_ruby_reloader
ActionDispatch::Callbacks.to_prepare do
lib_ruby_reloader.execute_if_updated
end
# .rabl 文件
rabl_files = Dir.glob(Rails.root.join("app/services/views/v1/**/*.rabl"))
lib_rabl_reloader = ActiveSupport::FileUpdateChecker.new(rabl_files){
lib_ruby_reloader.execute
}
Rails.application.reloaders << lib_rabl_reloader
ActionDispatch::Reloader.to_prepare {
lib_rabl_reloader.execute_if_updated
}
end
补充:config.autoload_paths 还是要配置的。