libro
www.tuyano.com
初心者のためのRuby on Rails3入門

Modelを作ろう! (6/7)

作成:2012-02-06 08:24
更新:2012-02-06 08:24

■デプロイからマイグレーションまで

これでひと通りの作業ができました。ここで一度、デプロイしておきます。といっても、初めてデプロイしたときは簡単でしたが、既にあるアプリを更新する場合には、決まった手順を踏まなければいけません。ここで手順を覚えておいてください。

・デプロイの手順

1. commandsアイコンメニューから、<Stage>を選びます。もしメニューが選択できないようならこれは飛ばしてかまいません。

2. 続いて、commandsアイコンメニューから、<Commit...>を選び、ダイアログを呼び出します。そして、unstaged changesの「>>」ボタンを押し、全部staged changesに移動します。最後に、Commit messageにメッセージを適当に書いて「Commit」ボタンを押してください。これでコミットされます。

3. Deployのアイコンメニューから<Deploy App>を選びます。これでデプロイされます。

――なぜ、一度デプロイしておくのか。それは次の「マイグレーション」のためです。


■マイグレーション

これで一応、RailsアプリはHerokuサーバーにアップされてはいますが、しかしこのままでは動きません。まだ肝心のものが作成されていないからです。それは、「データベースのテーブル」です。今の段階ではModelクラスだけしかありません。そのModelを介してデータベースにデータを保管したりデータを取り出したりする、肝心のテーブルがないのです。

このテーブルは、ローカル環境などであれば直接SQLコマンドを発行したり、専用の管理ツールを使って作りますが、Herokuの場合、サーバーにデータベースを操作するための機能やツールなどは用意されていません。そこで利用するのが「マイグレーション」です。

マイグレーションは、SQLなどのコマンドを使うことなくデータベース関連を更新するための仕組みです。これはApp Studioの場合には、App Explorerの「Deploy」アイコンの中にある<Detabase>メニューのサブメニューから<Rake db:migrate on Heroku>メニューを選びます。あるいはコマンドプロンプトやコンソールから、以下のherokuコマンドを使っても実行されます。
heroku rake db:migrate
これを実行すると、「db」フォルダの中に「migrate」というフォルダが作られ、その中にRubyのスクリプトファイルが自動生成されます。これを開くと、下のリスト欄のようなものが生成されているのがわかるでしょう。ここに記述されているのが、マイグレーションの処理を行うためのスクリプトです。

これでテーブルがなければ生成されるのですが、まだ今の段階ではデータが全くありません。そこで、ダミーのデータを作っておくことにしましょう。「db」フォルダ内に、「seeds.rb」というファイルを作成してください。そして、そこに以下のように記述しておきましょう。
Helo.create(title:'Hello', content:'This is Test!')
これは、Heloインスタンスを作成するものです。「create」というメソッドで、必要なデータをその後にまとめて記述し、呼び出します。これでHeloインスタンスが1つ作成され、Heloクラスに対応するテーブルにそのデータが1つ保管されます。記述したら、以下のコマンドを実行します。
heroku rake db:seed
これでseeds.rbの内容がアプリに適用されます。うまく機能しない場合は、再度デプロイしてから改めてheroku rake db:seedを実行してください。これで正しく機能するようになっているはずです。

これでひと通り完成しました。改めてアプリをHerokuにデプロイし、アップロードされたアプリの/helo/indexにアクセスしてみましょう。ちゃんとseeds.rbに記述しておいたデータが表示されたでしょうか。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※マイグレーションファイルの中身

class CreateHelos < ActiveRecord::Migration
  def change
    create_table :helos do |t|
      t.string :title
      t.string :content

      t.timestamps
    end
  end
end


※seeds.rbの内容

Helo.create(title:'Hello', content:'This is Test!')

※関連コンテンツ

「初心者のためのRuby on Rails3入門」に戻る