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

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

前序

最近在升级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?

共收到 8 条回复

补充: 虽然 这是一个配置的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楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册