Rails 2.3.12下遇到的named route的诡异问题

在将网站从本地环境升级到Rails 2.3.12后,部署到服务器时遇到named routes调用失败的问题。经过长时间排查,最终通过修改Rails源代码中的default_url_options方法解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

周五的时候把网站升级到Rails 2.3.12,本来在本地测试都没有问题的,但是在服务器上遇到一个非常诡异的问题,足足用了一天一夜的时间。

本地: Mac OS X 10.7,Ruby 1.8.7,Rails 2.3.12
服务器:Ubuntu 8.04,Ruby Enterprise Edition 1.8.7,Rails 2.3.12

在服务器上,但凡是在 routes.rb 里面定义的 named route 在调用的时候都会出问题:

#routes.rb
map.resources :members,:member => { :articles => :get ... },:collection => {...}
map.show_user 'users/:title.:format',:controller => 'users',:action => 'show'

#在views中调用这样的代码时
<%= show_user_path(:title => user.name) %>
<%= articles_member_path(member) %>

#错误信息如下:
wrong number of arguments (0 for 1)
(eval):4:in `default_url_options'
(eval):4:in `articles_member_path'
app/views/users/_user.html.erb:12



试过了无数方法,皆无效,后来看到有人也有类似的问题 [url]https://github.com/rails/rails/commit/6a6b4392c16c665eb713705f2b38e959a658eeef[/url]
但是别人是把改代码改成现在rails 2.3.12里面的代码解决问题,我是把代码回滚到以前的代码解决了问题,当时我就傻了,想不到啊,想不到啊。

解决办法就是把rails的代码给改了:

# 注意两段代码 default_url_options 的参数
#/usr/local/lib/ruby/gems/1.8/gems/actionpack-2.3.12/lib/action_controller/routing/optimisations.rb

23 GLOBAL_GUARD_CONDITIONS = [
24 "(!defined?(default_url_options) || default_url_options.blank?)",
25 "(!defined?(controller.default_url_options) || controller.default_url_options.blank?)",
26 "defined?(request)",
27 "request"
28 ]

改为

23 GLOBAL_GUARD_CONDITIONS = [
24 "(!defined?(default_url_options) || default_url_options(nil).blank?)",
25 "(!defined?(controller.default_url_options) || controller.default_url_options(nil).blank?)",
26 "defined?(request)",
27 "request"
28 ]



由于本地测试是完全没有问题的,本地使用的东西和服务器唯一的不同就是Ruby的版本,本地用的是Ruby官方标准的 1.8.7 版本,服务器使用的是REE 1.8.7,目前我只能说是这个原因了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值