Rails 2.3.12で出会ったnamed routeの奇妙な問題

2151 ワード

金曜日に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で、今のところ私はこの原因としか言えません.