10分でできるswitchtower〜下ごしらえ
前回のrails勉強会で好評だった(?)switchtowerネタをようやくまとめようかと思い始めたわけです。次回まで引っ張るわけにもいきませんし。
さしあたり今回はswitchtowerに入れるためのサンプルアプリケーションを作ったうえでsvnレポジトリに入れるところまでをやってみようと思います。
今回は事前準備編ということで、面倒な人向けにレンジでチンするだけのtar.gzを用意しました。Subversion-1.3.0、fsfsフォーマットのレポジトリをアーカイブしてあります。
こちらからどうぞ。
蔵書管理アプリケーションの用意
(相方の)趣味と実益を兼ねて、蔵書管理アプリをつくってswitchtowerでdeployしたい
と思います。このエントリでは下準備編ということで、普通のrailsアプリケーション
を作るところまでやってみたいと思います。
0. 環境設定
今回はSQLite3を使ったWebアプリを作りたいと思います。ですので、gem他で
sqlite3-rubyをインストールしておいてください。当然railsも入れておいてください
ね。
# gem install --require-dependencies rails sqlite3-ruby (略)
1. 雛型の生成
蔵書管理アプリということでアプリ名はBookShelfで。項目としては『書名』『著者』
『説明』『巻数』あたりを入力していきたいと思います。
まずはお決まりのrailsコマンドで雛型を生成します。
$ mkdir /home/moro/switchtower_in_10m $ cd /home/moro/switchtower_in_10m $ rails BookShelf (略)
2. DBの設定
雛型は生成されましたね。次は何はともあれscaffoldをするためにDBの設定をします。
$ cd BookShelf $ vim config/database.yml
いろんな設定がありますが、バシバシ消して、今回必要な項目だけを残すことします。
database.ymlはこんな感じになります。
development: adapter: sqlite3 database: db/book_shelf.dev test: adapter: sqlite3 database: ":memory:" production: adapter: sqlite3 database: db/book_shelf
3. subversionレポジトリの作成とimport
続いて作成したrailsアプリ(雛型)をsubversionレポジトリに登録します。
細かい手順は省略しますが、(1)レポジトリの作成、(2)作ったアプリのimportという手順で進めます。ちゃんとやりたい場合は
wiki.rails2u.comの記事を参考にするのがいいと思います。
$ cd /home/moro/switchtower_in_10m/ $ svnadmin create sw_10m.repos $ svn import ./BookShelf file://home/moro/switchtower_in_10m/sw_10m.repos -m " * initial import" (略)
importが無事に完了したら、作業用のworking copyをcheckoutします。以降はこのBookShelf.workにて作業を進めたいと思います。
- 注意::今回はdeploy先の環境でもdb/database.ymlを使いまわすする都合上、db/database.ymlもレポジトリに入れています。実際の環境ではdb/database.ymlを入れないとも多いと思いますのでご注意ください。
$ svn checkout file:///home/moro/switchtower_10m_cooking/sw_10m.repos BookShelf.work (略)
4. migrationの作成
さきほどcheckoutしたwork copyはすでに2.でDBの設定ができているはずです。
続いて実際にテーブルを作ります。最近のrailsではSQLiteもmigrationの対象になりました。早速使ってみましょう。
$ cd /home/moro/switchtower_in_10m/BookShelf.work $ ruby script/generate migration CreateTable exists db/migrate create db/migrate/001_create_table.rb
さらに、生成されたmigrateファイルを編集し、テーブルを定義します。
$ vim db/migrate/001_create_table --- class CreateTable < ActiveRecord::Migration def self.up create_table :books do |table| table.column :name, :string table.column :description, :string table.column :author, :string table.column :number, :integer end end def self.down drop_table :books end end
これを定義したら、実際にmigrationを実行すると、DBテーブルが定義されます。
(初回は自動的にSQLite なDBファイルが作成されます。)
$ rake migrate (in /home/moro/switchtower_10m_cooking/BookShelf.work)
5. scaffold
あとはいつものようにscaffoldしてアプリケーションを作成します。
$ ruby script/generate scaffold Book exists app/controllers/ exists app/helpers/ create app/views/books exists test/functional/ 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 app/views/books/_form.rhtml create app/views/books/list.rhtml create app/views/books/show.rhtml create app/views/books/new.rhtml create app/views/books/edit.rhtml create app/controllers/books_controller.rb create test/functional/books_controller_test.rb create app/helpers/books_helper.rb create app/views/layouts/books.rhtml create public/stylesheets/scaffold.css
続いて起動してみます。
$ ruby script/server $ firefox http://localhost:3000
うまくいってますね。まずはCRUDしたりいろいろと遊んでみましょう。
6. svn commit そして。。
仕上げに、ここまで作ったアプリをsvnに登録します。log以下のファイル以外すべてをレポジトリに登録することにします*1。
$ svn --force remove log/* $ svn propset "svn:ignore" '**.log*' log $ svn add app/views/books (略)
すべてが済んだら、svn commitします。
$ svn status (略) $ svn commit -m "create sample app for Switchtower demo." Adding app/controllers/books_controller.rb Adding app/helpers/books_helper.rb Adding app/models/book.rb Adding app/views/books Adding app/views/books/_form.rhtml Adding app/views/books/edit.rhtml Adding app/views/books/list.rhtml Adding app/views/books/new.rhtml Adding app/views/books/show.rhtml Adding app/views/layouts/books.rhtml Sending config/database.yml Adding config/lighttpd.conf Adding (bin) db/book_shelf.dev Adding db/migrate Adding db/migrate/001_create_table.rb Sending log Deleting log/development.log Deleting log/production.log Deleting log/server.log Deleting log/test.log Adding public/stylesheets/scaffold.css Adding test/fixtures/books.yml Adding test/functional/books_controller_test.rb Adding test/unit/book_test.rb Transmitting file data ................. Committed revision 2.
ということで作成したサンプルでsvnレポジトリの中身を作りました。今日はここまでで、Switchtowerを使ってみよう本編に続きます。
*1:今回はdevelopment用のDB、db/book_shelf.devもレポジトリに入れちゃいます。