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からの接続を確認。サンプルプログラムは、以下のページの参考例を使わせていただきました。
#!/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 itemapp/controllers ディレクトリに、item_controller.rbが自動作成されるので、それを編集。
class ItemController < ApplicationController scaffold :item end
このscaffoldが、かなり強力な役割をはたします。
http://localhost/プロジェクト名/item
にアクセスすると、まだDBには何も入っていないので、以下のような画面。
そこで「new item」リンクをクリックすると、以下のような入力画面になり
入力すると、itemがDBに格納されて、画面に表示されます。これがRuby on Railsのパワーですね。DBアクセス(Model)、入力・出力画面(View)、そのコントロール(Controller)が全部自動的に生成されています。

ブックマーク & はてなスター
コメント