论坛首页 编程语言技术论坛

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

浏览 2021 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-08-14  
周五的时候把网站升级到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



试过了无数方法,皆无效,后来看到有人也有类似的问题 https://github.com/rails/rails/commit/6a6b4392c16c665eb713705f2b38e959a658eeef
但是别人是把改代码改成现在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,目前我只能说是这个原因了。
   发表时间:2011-08-15  
验证你的猜测不是很简单么?本地安装REE 1.8.7就是了。
0 请登录后投票
   发表时间:2011-08-15  
rubynroll 写道
验证你的猜测不是很简单么?本地安装REE 1.8.7就是了。

是啊 用rvm就一句话的事儿
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics