ActiveRecordを単体で動かす。
とりあえず、以下のようなコードを書いて実行してみました。
class Item < ActiveRecord::Base end
すると、こんなエラーが出ました。
C:\work\rubyproject\test>ruby test.rb test2.rb:1: uninitialized constant ActiveRecord (NameError)
まあ、これは想定の範囲内ってことで。ライブラリの依存関係を解消してないために出ているエラーっぽいです。じゃあ、Railsの中ではどうやってライブラリ解決してるの?っていうことで、Railsの生成物の中からrequireが含まれる部分をgrepしてみました。すると、config/boot.rbっての見つかりました。
unless defined?(RAILS_ROOT) root_path = File.join(File.dirname(__FILE__), '..') unless RUBY_PLATFORM =~ /mswin32/ require 'pathname' root_path = Pathname.new(root_path).cleanpath(true).to_s end RAILS_ROOT = root_path end if File.directory?("#{RAILS_ROOT}/vendor/rails") require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer" else require 'rubygems' require 'initializer' end Rails::Initializer.run(:set_load_path)
このboot.rbを取り込めればよかったんでしょうけど、いまいちどうやるか不明だったので、
require 'rubygems' require 'initializer'
の二行を取り込んでみたところ、普通に動いてしまいました。以下実証コードです。
# 必須ライブラリをインクルード(?) require 'rubygems' require 'initializer' # itemsテーブルへのマッピング class Item < ActiveRecord::Base end # 接続されているかどうかチェック puts Item.connected? # mysqlに接続 ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username => "taka", :password => "hogehoge", :database => "todos" ) # ID=4のレコードを取得 item = Item.find(4) # 接続されているかどうかチェック puts Item.connected? # ID=4のレコードのid列を表示 puts item["id"] # 全カラム名を出力 Item.column_names.each do |x| puts x end
そして以下が実行例
C:\work\rubyproject\test>ruby test.rb false true 4 id done priority description due_date category_id note_id private created_on updated_on
ActiveRecordは、この単体実行を足がかりに色々試せそうです。しかし、やっぱりWebに最適化されているせいか、起動が遅いなぁ。。