RoR学習日記 STEP02 物品発注システムの土台を作成する

もくじ:RoR学習日記 - progd


参考:http://www008.upp.so-net.ne.jp/letitbe/rails002.htm


今回はRailsでWebアプリの土台の作成と、MySQLでデータベースの用意です。

  • Railsアプリケーションを作成する
  • MySQLデータベースの作成
  • articlesテーブルの作成
  • データベースの設定
  • 日本語の設定

Railsアプリケーションを作成する

作成といっても、ディレクトリを作って、コマンドを打つだけです。Visual Studioとかで「新規プロジェクト」するのと同じかも。
チュートリアルではCドライブ直下にRails\work\というディレクトリを作成していますが、僕はホームディレクトリに作成しました。
~/Rails/work/
にて、officeという名前で作成します。名前を引数にして、railsコマンドを打てばOK。

~/Rails/work$ rails office
プログラム 'rails' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install rails
bash: rails: command not found

あれぇ・・・


インストールに失敗でもしたのかな?と思い、gemのヘルプを見たりしながら調べてみました。

$ gem list

*** LOCAL GEMS ***
(略)
rails (2.0.2)
    Web-application framework with template engine, control-flow layer,
    and ORM.

ちゃんと入ってるみたい。


railsの実行ファイルのある場所を探してみました。

$ gem environment
RubyGems Environment:
  - VERSION: 0.9.4 (0.9.4)
  - INSTALLATION DIRECTORY: /var/lib/gems/1.8
  - GEM PATH:
     - /var/lib/gems/1.8
  - REMOTE SOURCES:
     - http://gems.rubyforge.org

INSTALLATION DIRECTORYの下を探してみると、ありました。

/var/lib/gems/1.8/bin$ ./rails -v
Rails 2.0.2

うん、入ってます。
いわゆるパスが通ってなかったっていうことでしょうか。
このディレクトリにパスを通してみる。

$ PATH=$PATH:/var/lib/gems/1.8/bin
$ export PATH
$ rails -v
Rails 2.0.2

できました!なんという初歩的ミス。


気を取り直して。

~/Rails/work$ rails office
      create  
      create  app/controllers
(略)
      create  log/test.log
~/Rails/work$ cd office/
~/Rails/work/office$ ls
README    app     db   lib  public  test  vendor
Rakefile  config  doc  log  script  tmp

できました。

MySQLデータベースの作成

チュートリアルに従って、3つのデータベースを作成します。

開発用データベース : office_development
テスト用データベース : office_test
本番用データベース : office_production
~/Rails/work/office$ mysql -u root -p
(略)
mysql> 

ユーザーroot、パスワード付きでmysqlを実行。
そういえばMySQLも初体験。今回はとりあえずRailsで使えるようにすることが目的なので、詳しい意味はいずれ勉強することにしておきます。


createコマンドで、データベースを作成します。

mysql> create database office_development;
Query OK, 1 row affected (0.18 sec)

mysql> create database office_test;
Query OK, 1 row affected (0.00 sec)

mysql> create database office_production;
Query OK, 1 row affected (0.00 sec)

データベースを3つ作成しました。


いま作ったデータベースにユーザ権限を与えます。

mysql> grant all on office_development.* to 'rails'@'localhost';
Query OK, 0 rows affected (0.10 sec)

mysql> grant all on office_test.* to 'rails'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on office_production.* to 'rails'@'localhost' identified by 'administrator';
Query OK, 0 rows affected (0.01 sec)

development, test はユーザrails、ホストlocalhostでアクセスでき、productionはさらにパスワード'administrator'でアクセスできるようになりました。

articlesテーブルの作成

データベース上に、品物を格納するテーブルを作成します。
チュートリアルによると、テーブル名をarticlesにしておけば、後でRubyでコードを書くときにArticleというモデルクラスで自動的にテーブルを探し出せるとのこと。
よくわからないけど、その時になればわかるんでしょう。今は言われるがままに設定していくことにします。


先ほどrailsコマンドでofficeを作成したディレクトリの中に、dbというディレクトリがあります。
~/Rails/work/office/db/
このディレクトリに、create.sqlというファイルを作成します。


ファイルの内容はチュートリアルにあるものをそのまんま張り付けました。
内容は、

  • id
    • 主キー(primary key)として使われる
  • title
  • description
  • image_url
  • price
  • date
  • vender
  • category

というフィールドを持つテーブル'articles'を作成しなさい、というもの。


このファイルを使って、office_developmentデータベースにarticlesテーブルを作成します。

~/Rails/work/office$ mysql -u root -p office_development <db/create.sql 
Enter password: 
~/Rails/work/office$ 

なにが変化したかさっぱりわかりませんが、これで完了らしい。

データベースの設定

データベースの接続情報を
~/Rails/work/office/config/database.yml
に記述します。


デフォルト状態のdatabase.ymlの内容は以下のとおりです。

# SQLite version 3.x
#   gem install sqlite3-ruby (not necessary on OS X Leopard)
development:
  adapter: sqlite3
  database: db/development.sqlite3
  timeout: 5000

# Warning: The database defined as 'test' will be erased and
# re-generated from your development database when you run 'rake'.
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  timeout: 5000

なんかチュートリアルにある内容と全然違うんですが・・・。adapterもmysqlじゃなくsqlite3になってるし。項目も少ない。
バージョンが違うためかもしれません。


一応バックアップを作成しておいて(database.yml.backup)、database.ymlの内容をチュートリアルにあるとおりに上書きしました。

development:
  adapter: mysql
  database: office_development
  username: ""
  password:
  host: localhost

test:
  adapter: mysql
  database: office_test
  username: ""
  password:
  host: localhost

production:
  adapter: mysql
  database: office_production
  username: rails
  password: administrator
  host: localhost

日本語の設定

日本語を扱うため、文字コードUTF-8に設定します。


~/Rails/work/office/config/environment.rb
で、$KCODEという変数をUTF8に設定します。

$KCODE = "UTF8"

# Be sure to restart your server when you modify this file

# Uncomment below to force Rails into production mode when
# you don't control web/app server and can't set it the proper way
# ENV['RAILS_ENV'] ||= 'production'
(以下略)

ファイルの先頭に、
$KCODE = "UTF8"
を記述しました。
ちなみにRubyでは、先頭が$の変数はグローバル変数です。


さらに、Content-Typeのcharsetパラメータを設定します。
~/Rails/work/office/app/controllers/application.rb
の中に、以下の行を追加しました。

  before_filter :set_charset
  
  private
  
  def set_charset
      headers["Content-Type"] = "text/html; charset=UTF-8"
  end


今回はここまで。今回はrailsの土台と、データベースを作成しました。
データベースの設定(database.yml)のところがちょっと不安ですが、うまくいくんでしょうか。
完全にただの書写になりつつありますが、勉強になればいいので気にせず続けます。