【问题标题】:how to reload routes /config/routes/* in rails 4?如何在 rails 4 中重新加载路由 /config/routes/*?
【发布时间】: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 项目中,您的代码示例确实从这些文件中加载了路由,但它似乎没有在开发中重新加载它们——我需要重新启动服务器以获取更改。

标签: routes ruby-on-rails-4 reload


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多