RoR学習日記 STEP02 物品発注システムの土台を作成する
もくじ:RoR学習日記 - progd
参考:http://www008.upp.so-net.ne.jp/letitbe/rails002.htm
今回はRailsでWebアプリの土台の作成と、MySQLでデータベースの用意です。
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
日本語の設定
~/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)のところがちょっと不安ですが、うまくいくんでしょうか。
完全にただの書写になりつつありますが、勉強になればいいので気にせず続けます。