Railsアプリケーションを作成する
サンプルのRailsアプリケーションを作成して動作確認までを行う。
Railsアプリケーションの作成
利用するDBを--databaseオプションで指定する。
以前はデフォルトでMySQLが指定されたが、Rails2.0.2からsqlite3がデフォルトになった。
$ rails my_app --database=mysql
データベースの作成
$ cd my_app/db
$ vi create_database.sql
以下を記述DROP DATABASE IF EXISTS my_app_development;
CREATE DATABASE my_app_development DEFAULT CHARACTER SET utf8;DROP DATABASE IF EXISTS my_app_test;
CREATE DATABASE my_app_test DEFAULT CHARACTER SET utf8;DROP DATABASE IF EXISTS my_app_production;
CREATE DATABASE my_app_production DEFAULT CHARACTER SET utf8;
MySQLユーザの作成
アプリケーション用のMySQLユーザを作成する。
公式リファレンス見る限りこれで良さそうだけど何故かエラーになる。
$ mysql -u root -p
mysql> GRANT ALL ON 'my\_app\_%'.* TO my_app@localhost IDENTIFIED BY '****';
ERROR 1064 (42000): You have an error in your SQL syntax...
以下の方法で作成することにする。
mysql> GRANT ALL ON my_app_development.* TO my_app@localhost IDENTIFIED BY '****';
mysql> GRANT ALL ON my_app_test.* TO my_app@localhost;
mysql> GRANT ALL ON my_app_production.* TO my_app@localhost;
database.ymlの修正
$ vi my_app/config/database.yml
以下を修正development:
adapter: mysql
encoding: utf8
database: my_app_development
pool: 5
username: my_app
password: ****
socket: /tmp/mysql.socktest:
adapter: mysql
encoding: utf8
database: my_app_test
pool: 5
username: my_app
password: ****
socket: /tmp/mysql.sockproduction:
adapter: mysql
encoding: utf8
database: my_app_production
pool: 5
username: my_app
password: ****
socket: /tmp/mysql.sock
scaffoldジェネレータの実行
opensslが無いというエラーが出た。
$ cd my_app
$ ruby script/generate scaffold book title:string author:string price:integer
/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/initializer.rb:259:in 'require_frameworks': no such file to load --openssl (RuntimeError)
調べてみると、Railsを使う場合はRubyのインストール前にopensslとopenssl-develを入れておく必要があるとのこと。
ついでにreadlineとreadline-develも入れておく。これが無いとscript/consoleが動かないらしい。(参考 http://d.hatena.ne.jp/yatmsu/20081120/1227162444)
# rpm -qa | grep -i openssl
openssl-0.9.8e-7.el5
# yum install openssl-devel
RPMパッケージをアンインストールして入れなおす。
# yum install readline
# yum install readline-devel
再びscaffoldジェネレータを実行する。
# rpm -e rubygems-1.3.1-1
# rpm -e ruby-1.8.7-1
# rm -rf /usr/lib/ruby
# rm -rf /usr/src/redhat/RPMS/i386/ruby-1.8.7-1.i386.rpm
# rm -rf /usr/src/redhat/RPMS/i386/rubygems-1.3.1-1.i386.rpm
# cd ruby-1.8.7
# make clean
# ./configure --prefix=/usr
ここから先はhttp://d.hatena.ne.jp/totemn/20090217/1237027081と同じ手順でやり直す
$ cd my_app
$ ruby script/generate scaffold book title:string author:string price:integer
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/books
exists app/views/layouts/
exists test/functional/
exists test/unit/
create test/unit/helpers/
exists public/stylesheets/
create app/views/books/index.html.erb
create app/views/books/show.html.erb
create app/views/books/new.html.erb
create app/views/books/edit.html.erb
create app/views/layouts/books.html.erb
create public/stylesheets/scaffold.css
create app/controllers/books_controller.rb
create test/functional/books_controller_test.rb
create app/helpers/books_helper.rb
create test/unit/helpers/books_helper_test.rb
route map.resources :books
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/book.rb
create test/unit/book_test.rb
create test/fixtures/books.yml
create db/migrate
create db/migrate/20090410220451_create_books.rb
テーブルの作成
scaffoldジェネレータによって作られたマイグレーションファイルを実行することでテーブルを作成する。
mysqlドライバが無いというエラーが出たのでドライバを入れる。
$ rake db:migrate
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
no such file to load -- mysql
再びmigrateを実行する。
$ gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
今度はlibmysqlclient.so.15が見つからないというエラー。
$ rake db:migrate
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql.
rake aborted!
libmysqlclient.so.15: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so
libmysqlclient.so.15のパスをld.so.cacheに追加する。
migrateを実行する。
$ vi /etc/ld.so.conf.d/mysql.conf
以下を記述して保存する。/usr/local/mysql/lib
$ ldconfig
作成されたテーブルを確認してみる。
$ rake db:migrate
== CreateBooks: migrating ====================================================
--create_table(:books)
-> 0.0048s
== CreateBooks: migrated (0.0050s) ===========================================
$ mysql -u my_app -p
mysql> use my_app_development
mysql> desc books;Field | Type | Null | Key | Default | Extra
id | int(11) | NO | PRI | NULL | auto_increment
title | varchar(255) | YES | | NULL |
author | varchar(255) | YES | | NULL |
price | int(11) | YES | | NULL |
created_at | datetime | YES | | NULL |
updated_at | datetime | YES | | NULL |
6 rows in set (0.00 sec)
動作確認
WEBrickを起動する。
http://localhost:3000/booksにアクセスするとbook一覧ページが表示された。
$ cd my_app
$ ruby script/server