如何在 rails 4 中重新加载路由 /config/routes/*?

Posted

技术标签:

【中文标题】如何在 rails 4 中重新加载路由 /config/routes/*?【英文标题】:how to reload routes /config/routes/* in rails 4? 【发布时间】:2013-09-25 00:31:26 【问题描述】:

如何强制 rails 4 重新加载所有路由文件?无需重新启动应用程序即可使 /config/routes/.rb 中的路由加载* 我在 /config/routes/.rb 中对它们进行了拆分 但这些 /config/routes/ 文件不会重新加载。

这在rails 3中有效,但在rails 4中无效:

#config.paths['config/routes'].unshift *Dir["config/routes/*.rb"]

【问题讨论】:

在我的 Rails 3 项目中,您的代码示例确实从这些文件中加载了路由,但它似乎没有在开发中重新加载它们——我需要重新启动服务器以获取更改。 【参考方案1】:

在 Rails 3 中,如果要将 routes.rb 文件拆分为多个文件,我们必须在 application.rb 中添加这一行:

config.paths['config/routes'].concat Dir[Rails.root.join("config/routes/*.rb")]

...以及config/routes/*.rb文件中对应的路由 像这样:

TestApp::Application.routes.draw do
  namespace :api do
    resources :test
  end
end

在 Rails 4 中,Rails 不再在 Rails::Engine.paths 中提供 ["config/routes"] 键。但是,在 Rails 4 中,无需在 config.path 中添加 application.rb

只需在config/routes/*.rb下添加对应的路由即可。

【讨论】:

每次更改 /config/routes/*.rb 文件时都需要重新启动 Rails 应用程序,更改 /config/routes.rb 确实有效。但我的问题旨在重新加载 /config/routes/*.rb 文件修改而无需重新启动。就像您建议的那样,它不会自行重新加载!【参考方案2】:
config.paths["config/routes.rb"] << YOUR_ROUTE_FILE

【讨论】:

使用路由目录(而不是上面的单个目录),+= 不起作用,但这样做:Dir[Rails.root.join("config/routes/*.rb")].sort.each |route_file| config.paths["config/routes.rb"] &lt;&lt; route_file 在我不再收到错误的意义上起作用信息。不知道他们是否在不重新启动应用程序的情况下重新加载。可能不会。 我们在 Rails 4 中使用 config.paths 来拥有多个路由文件,一切都在生产中重新加载。【参考方案3】:

你可以使用:

Rails.application.reload_routes!

你可以read about it here(必须使用find

【讨论】:

以上是关于如何在 rails 4 中重新加载路由 /config/routes/*?的主要内容,如果未能解决你的问题,请参考以下文章

Ionic 4 路由到带有选项卡的视图会触发整页重新加载

如何在 Rails 4 中为 AngularJS 更正设置根路由?

如何从控制器路由 Rails 4 获得不同的和多个视图

Rails 4 Turbo-links Coffee脚本未加载[重复]

sysctl -p 重新加载文件/etc/sysctl.conf -a 所有参数 -w 临时指定

rails 4.2 DataTables无法重新初始化DataTable