Ruby on Rails の MySQL設定 Mac OSX

Mac OSX Tiger(10.4.2)での、Ruby on Railsの設定では、MySQLの部分が、ちょっとはまることがあるようだ。ご多分に漏れず、最初にはまってこんなメッセージを連発。

ActiveRecord::StatementInvalid No database selected: SELECT COUNT(*) FROM items

色々と試して解決はしたので、多分、この手順でやればOKなのかな?という手順をメモしておきます。余分な物も含まれているかもしれませんが、とりあえずやったことを、もれなくということで。

MySQLをセットアップ

1.MySQL 4.1.14 をインストール(OSX用Binary)

MySQLをインストールして、プロセスを起動します

$sudo mysqld_safe
2. DBと、Tableを作成

ここでは仮に、「items」というテーブルを作成。

3. MySQLにrootログインして、新しくアカウントを作成

※注:rootアカウントをパスワード無しで、RailsのDBアカウントに指定するとトラブルになることがあるよう。

mysql > GRANT ALL PRIVILEGES ON DB名.* TO 'ユーザーID'@'localhost'
 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;

mysql > GRANT ALL PRIVILEGES ON DB名.* TO 'ユーザーID'@'%'
 IDENTIFIED BY 'パスワード' WITH GRANT OPTION;

MySQLへのRubyからの接続確認

MySQL/Ruby

以下のページから、mysql-ruby-2.7.tar.gz をダウンロード。
MySQL/Ruby

上記ページの手順に従って、make installまでおこなう。

RubyからMySQLにアクセスできることを確認

サンプルプログラムを、db_test.rbなどで保存。実行して、MySQLへのRubyからの接続を確認。サンプルプログラムは、以下のページの参考例を使わせていただきました。

Ruby and Mysql

 
#!/usr/local/bin/ruby -w   
# example for MysqlRes#fetch_fields and MysqlRes#fetch_rows

require "mysql"                                                 
 
dbname = "作成したDB名"               

m = Mysql.new("localhost", "アカウントID", "パスワード")  
m.select_db("tags")        
result = m.query("SELECT * FROM items")  
fields = result.fetch_fields    
fields.each do |field|            
    puts field.name            
    puts field.table        
    puts field.def     
    puts field.type        
    puts field.length     
    puts field.max_length    
    puts field.flags            
    puts field.decimals         
end                                  

m.close                                       

これを実行して、ちゃんとitemsテーブルのカラムが表示されているようならOK。

Railsの設定

Railsプロジェクトを作成

すでにRailsのプロジェクトは作ってあったのですが、作成後にMySQLの設定をしたせいか、挙動がおかしいので、新しいプロジェクトを作成。プロジェクトの作成方法、Apacheの設定などは以下のページを参照。

Ruby on Rails を Mac OSX Tigerで:Goodpic

database.ymlの設定

「/Rails/プロジェクト名/config」にある、database.ymlを設定。作成したDBのアカウント情報を指定。

development:
  adapter: mysql
  database: DB名
  host: localhost
  username: アカウントID
  password: パスワード

test:
  adapter: mysql
  database: DB名
  host: localhost
  username: アカウントID
  password: パスワード 
     
production:
  adapter: mysql
  database: DB名
  host: localhost
  username: アカウントID
  password: パスワード

RailsでModel作成

Modelを作成

MVCフレームワークのModelを作成。MySQLのDBテーブルでは、「items」というテーブルをつくりました。このDBテーブルにアクセスするRubyのモデル名は「item」になります。

$ ruby script/generate model item
MVCのcontrollerを作成

itemモデルにアクセスするためのコントローラーを作成

$ ruby script/generate controller item
app/controllers ディレクトリに、item_controller.rbが自動作成されるので、それを編集。
class ItemController < ApplicationController
  scaffold :item
end

このscaffoldが、かなり強力な役割をはたします。
http://localhost/プロジェクト名/item
にアクセスすると、まだDBには何も入っていないので、以下のような画面。

FirefoxScreenSnapz004.png

そこで「new item」リンクをクリックすると、以下のような入力画面になり

FirefoxScreenSnapz005.png

入力すると、itemがDBに格納されて、画面に表示されます。これがRuby on Railsのパワーですね。DBアクセス(Model)、入力・出力画面(View)、そのコントロール(Controller)が全部自動的に生成されています。

FirefoxScreenSnapz006.png
関連記事
関連記事