Rails 2.3.12で出会ったnamed routeの奇妙な問題
金曜日に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は呼び出し時に問題が発生します.
無数の方法を試みたが,いずれも無効で,後で似たような問題がある人を見た.https://github.com/rails/rails/commit/6a6b4392c16c665eb713705f2b38e959a658eeef
しかし、他の人はコードを変更して今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
無数の方法を試みたが,いずれも無効で,後で似たような問題がある人を見た.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で、今のところ私はこの原因としか言えません.