3 日坊主日記
2005-07-13 [長年日記]
_ [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/
高松市付近はあまり拡大できなくて悲しかったり。
本日のTrackBacks(全1件)
[]
ずいぶんと昔に書いたコードを、最新のRailsに移植してみようか、と思って見てみると、 # in config/environment.rb require_gem 'rails', '= 0.12.1' さらに古い地層には、CGIKitで書かれた先Rails時代のコー

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