如何在 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"] << route_file
在我不再收到错误的意义上起作用信息。不知道他们是否在不重新启动应用程序的情况下重新加载。可能不会。
我们在 Rails 4 中使用 config.paths
来拥有多个路由文件,一切都在生产中重新加载。【参考方案3】:
你可以使用:
Rails.application.reload_routes!
你可以read about it here(必须使用find
)
【讨论】:
以上是关于如何在 rails 4 中重新加载路由 /config/routes/*?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Rails 4 中为 AngularJS 更正设置根路由?
Rails 4 Turbo-links Coffee脚本未加载[重复]