トップ «前の日記(2005-07-12) 最新 次の日記(2005-07-14)» 編集

3 日坊主日記


2005-07-13 [長年日記]

_ [Rails] Rails 0.12.1 -> 0.13.0

helperで定義した定数がviewでmodule名なしにアクセスできなくなってる。 こりゃちと面倒だなあ。

_ [Rails] require する gem を切り替える, あるいは svn head を使う

svn head, gem head, 0.12.1 を切り替えて test の通り具合の違いを見たいので environment.rb の頭を次のようにしてみた。

 RAILS_ROOT = File.dirname(__FILE__) + "/../"
 RAILS_ENV  = ENV['RAILS_ENV'] || 'development'

 RAILS_VERSION = :edge#nil#'0.12.1'
 SVN_BASEDIR = 'C:/home/moriq/vendor/trunk'  # uses if RAILS_VERSION == :edge

 VERSION_REQUIREMENTS = {
   '0.12.1' => {
     'activesupport'=>'= 1.0.4',
     'activerecord'=>'= 1.10.1',
     'actionpack'=>'= 1.8.1',
     'actionmailer'=>'= 0.9.1',
     'actionwebservice'=>'= 0.7.1',
     'rails'=>'= 0.12.1',
   }
 }

 # Mocks first.
 ADDITIONAL_LOAD_PATHS = ["#{RAILS_ROOT}/test/mocks/#{RAILS_ENV}"]

 # Then model subdirectories.
 ADDITIONAL_LOAD_PATHS.concat(Dir["#{RAILS_ROOT}/app/models/[_a-z]*"])
 ADDITIONAL_LOAD_PATHS.concat(Dir["#{RAILS_ROOT}/components/[_a-z]*"])

 # Followed by the standard includes.
 ADDITIONAL_LOAD_PATHS.concat %w(
   app
   app/models
   app/controllers
   app/helpers
   app/apis
   config
   components
   lib
   vendor
 ).map { |dir| "#{RAILS_ROOT}/#{dir}" }

 if RAILS_VERSION == :edge
   Dir.glob(SVN_BASEDIR+'/*/lib') do |libdir|
     ADDITIONAL_LOAD_PATHS.push libdir
   end
 end

 # Prepend to $LOAD_PATH
 ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) }

 if RAILS_VERSION == :edge
   require 'active_support'
   require 'active_record'
   require 'action_controller'
   require 'action_mailer'
   require 'action_web_service'
 else
   # Require Rails gems.
   require 'rubygems'
   gems = %w/ activesupport activerecord actionpack actionmailer actionwebservice rails /
   req = VERSION_REQUIREMENTS[RAILS_VERSION]
   if req
     gems.each {|gem| require_gem gem, req[gem] }
   else
     gems.each {|gem| require_gem gem }
   end
 end

_ [Rails] active_support/whiny_nil

 nil.id == 4

なので、例えば AR の find(id) で

 warning: Object#id will be deprecated; use Object#object_id

と警告は出るものの id=4 としてアクセスできてしまう問題がある。

 require 'active_support/whiny_nil'

とすると nil.id で RuntimeError が飛ぶ。また ::ActiveRecord::Base, ::Array のメソッドを nil に対して呼んだときに飛ぶ NoMethodError に『このクラスのつもりじゃないのかい』という感じのメッセージが入る。

optional な機能のようで lib/active_support.rb では require されない。

_ [Rails] http://map.rails2u.com/

高松市付近はあまり拡大できなくて悲しかったり。

_ [Rails] 互換性

完全な後方互換性? んなわけないって! ;)

_ [Rails] 0.13.1

ruby-talk:147755

『出てます。』はそろそろ入会案内とは別のところに書いたほうがよさげですね。

本日のツッコミ(全1件) [ツッコミを入れる]
# gorou (2005-07-13 20:44)

まったくもって!>後方互換性

本日のTrackBacks(全1件) []
# netswitch!:古代遺跡発掘 (2007-05-17 04:29)

ずいぶんと昔に書いたコードを、最新のRailsに移植してみようか、と思って見てみると、 # in config/environment.rb require_gem 'rails', '= 0.12.1' さらに古い地層には、CGIKitで書かれた先Rails時代のコー