SinatraでMySQLにActiveRecordで接続するときの,はじめの一歩

ruby :1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
gem :1.3.7
MySQL :Ver 14.14 Distrib 5.1.37, for Win32 (ia32)
sinatra :1.1.0
activerecord :1.15.6

sinatra
#>gem install sinatra -v=1.1.0 --no-rdoc --no-ri
で,インストールした後にapp.rbで以下のソースを保存して

#app.rb
require 'sinatra'
get '/hi' do
"Hello World!"
end

#>ruby app.rb
これで,http://localhost:4567/で走ってるかチェック.


activerecord
#>gem install activerecord -v=1.15.6 --no-rdoc --no-ri
特に,activerecordはv3.0.1が出てきて,さらにこけてくれちゃうのでもし入っている場合は,
#>gem uninstall activerecord -v=3.0.1
でおさらばします.


MySQL側の準備をします.コマンドラインからでもMySQL Admin & Query Browserでもいいです.Rubyist Magazine - RubyOnRails を使ってみる ActiveRecordを参照するのがYOI.


で,app2.rbには以下の内容を保存して

#app2.rb
require 'rubygems' # may not be needed, depending on platform
require 'active_record'


ActiveRecord::Base.establish_connection(
  :adapter => 'mysql',
  :host => 'localhost',
  :username => 'USERNAME', #or root
  :password => 'PASSWORD',
  :database => 'YOURDATABASE'
)


class User < ActiveRecord::Base
end


  user = User.new
  user.name = "bouyatetsu"
  user.save
  puts user.name

#>ruby app2.rb
でやっぱり走らす.坊や哲が現れたら成功.


以下注意

gem install mysqlは禁物

現在の環境に加えてmysqlのgem(v2.8.1)が入っている場合,なんかうまいこといきません.

こけた例1

app2.rbで

C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-1.15.6/lib/active_record/connection_adapters/abstract_adapter.rb:128:in `log': Mysql::Error: query: not connected INSERT INTO users (`name`) VALUES(NULL) (ActiveRecord::StatementInvalid)

こけた例2

activerecordsinatraも使ってるapp3.rb

require 'rubygems'
require 'sinatra'
require 'active_record'


class Product < ActiveRecord::Base
end


get '/' do
  ActiveRecord::Base.establish_connection(
    :adapter => 'mysql',
    :host => 'localhost',
    :username => 'root',
    :password => 'supercar',
    :database => 'dbss'
  )
Product.find(1)
end

を走らせた場合(Webrick),スタートするけどコップから水がこぼれて

ActiveRecord::StatementInvalid at Mysql::Error: query: not connected: SELECT * FROM products WHERE (products.`id` = 1)


で,これは原因が分からないけどもこんなんも出る.

mysql_adapter.rb:287:in `query': query: not connected (Mysql::Error)

さらには,

C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.2.2/lib/active_record/connection_adapters/mysql_adapter.rb:196: [BUG] Segmentation fault
ruby 1.8.6 (2007-09-24) [i386-mswin32]


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

が出たときも一度mysqlのgemとactiverecordが同居してないか確かめる.