周五的时候把网站升级到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 在调用的时候都会出问题:
试过了无数方法,皆无效,后来看到有人也有类似的问题 [url]https://github.com/rails/rails/commit/6a6b4392c16c665eb713705f2b38e959a658eeef[/url]
但是别人是把改代码改成现在rails 2.3.12里面的代码解决问题,我是把代码回滚到以前的代码解决了问题,当时我就傻了,想不到啊,想不到啊。
解决办法就是把rails的代码给改了:
由于本地测试是完全没有问题的,本地使用的东西和服务器唯一的不同就是Ruby的版本,本地用的是Ruby官方标准的 1.8.7 版本,服务器使用的是REE 1.8.7,目前我只能说是这个原因了。
本地: 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,目前我只能说是这个原因了。