Rails Rails 4 升级 加载多个路由的配置问题

easyhappy · 2014年03月10日 · 最后由 meeasyhappy 回复于 2014年03月10日 · 3440 次阅读

前序

最近在升级 Rails4,由于项目中用了很多个路由文件,暂列为以下几个:

config/routes.rb
config/routes/admin.rb
config/routes/books.rb
....

在 Rails3,只需配置如下:

config.paths['config/routes'] += %w{admin books}.map{|path| Rails.root.join("config/routes/#{path}.rb")}

然而在升级之后,启动 rails server, 发现报错了:

这个哥们 config.paths['config/routes'] 为 nil,不能使用 '+='了

开始还以为升级 Rails4 之后,配置方法发生了变化,但是 查看官方的升级文档,没有提及;

于是在查看了Rails4 engine 的源码:

initializer :add_routing_paths do |app|
  paths = self.paths["config/routes.rb"].existent

  if routes? || paths.any?
    app.routes_reloader.paths.unshift(*paths)
    app.routes_reloader.route_sets << routes
  end
end

确实从 Rails3 中 的 paths = self.paths["config/routes"].existent 变成了 paths = self.paths["config/routes.rb"].existent

Why

为什么 会如有如此改变,还是它就是一个 bug?

补充: 虽然 这是一个配置的 key 的改变,但是感觉这个改变不科学...

题外话: 怎么定义到 github 文件 的具体一行。

新的版本里官方加了加载某个路由文件的功能,具体用法如下

draw :admin #=> 加载 config/routes/admin.rb

这个改动其实早在 2012 就 Commit 进去,但好像是 Rails 4 才合并进来。改动地址如下

https://github.com/rails/rails/commit/6acebb38bc0637bc05c19d87f8767f16ce79189b

链接到 Github 文件的某一行可以点击文件的行号,浏览器的地址栏就会加上行号的锚点。

@_kaichen 刚才看了下 你给的链接,

draw :admin #=> 加载 config/routes/admin.rb

这个解决了 route 加载 具体一个路由配置。

但是,这个不是 我要问的问题 (如下):

怎么通过配置文件' 加载' 多个配置文件,类似与 Rails3

config.paths['config/routes'] += %w{admin books}.map{|path| Rails.root.join("config/routes/#{path}.rb")}

不过,如果这是一个 bug 的话,从你给的链接中,我找到了’幕后策划者'@wycats.....

#3 楼 @meeasyhappy

这个更新就是给出一个方法去调用,然后加载配置文件。与你在 Rails 3 里写的等价的效果是

draw :admin
draw :books

config/routes.rb也是一个配置文件,为什么要纠结于自己修改paths['config/routes']来处理这个事情呢?

@_kaichen 这个 draw :admin 放到哪里? 放到 config/routes.rb 中么?我试了一下 发现不对。

的确是个 Bug :plus1:

这个改动被 https://github.com/rails/rails/commit/5e7d6bba79393de0279917f93b82f3b7b176f4b5 干掉了,但是没弄干净。在 railties/lib/rails/engine/configuration.rb 里没有把这句 Revert 回来。

paths.add "config/routes.rb"
#=> paths.add "config/routes"

大哥,去提交一个 Pull Request 吧,然后你就是 Rails 的 Committer 了。

原来如此,谢谢 你的回复!我已经建了一个 issue 了。

题化话: 刚才 抽空看了 下你的博客。写的不错额,(^__^) 嘻嘻……!!

9 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号