[Rails] RailsでSQLite♪
こんにちわ。ばたっちです。
年度変わっちゃいました(汗
メルマガ配信システムも開発が続くことになり、社内でもRailsが市民権を得てきたかな。
ユーザに喜んでもらえるシステムに育てていきたいですね♪
もう、忘れかけていたUSBメモリの続きw
前回は、SQLiteとRubyのモジュールをインストールしました。
あ、そうそう。
Windowsのバッチファイルでドライブ名を取る件は結局分からなかったので、
バッチの引数で指定できるようにしました。
chenv.bat
----
@echo off
set Drive=%1% ←ここ
set Path=%Drive%:\ruby\bin;%Path%
set Path=%Drive%:\sqlite3;%Path%
----
こうやって使います。
E:\> chenv.bat E
さて、それは置いといて。。
RailsでSQLiteを使うためには、database.ymlを変更するだけでOKです。
MySQLの場合はこんなカンジですが、
config/database.yml
----
development:
adapter: mysql
database: webnote_development
username: root
password: mysql
host: localhost
encoding: UTF8
SQLiteだとこんなカンジになります。
config/database.yml
----
development:
adapter: sqlite3
dbfile: db/webnote_development.db
encoding: UTF8
ストレージがファイルになるので、database: ではなく、dbfile: というのを使うんですね。
dbfile: には、アプリケーションのトップディレクトリ(webnoteとか)からの相対パスを指定します。
「実践 Ruby on Rails Webプログラミング入門」 出版:株式会社ソーテック社 |
演習では、あらかじめmemopagesというテーブルを作って、scaffoldで雛形を生成しているので、
同じようにやってみましょう。
E:\> sqlite3.exe db\webnote_development.db
sqlite> create table memopages (
...> id int not null,
...> title varchar(255) not null,
...> content text,
...> primary key (id)
...> );
sqlite> .schema
CREATE TABLE memopages (
id int not null,
title varchar(255) not null,
content text,
primary key (id)
);
CREATE TABLE schema_info (version integer);
rakeでスキーマ定義のダンプを採ってみるとこんなカンジになりました。
E:\> rake db:schema:dump
:
create_table "memopages", :force => true do |t|
t.column "title", :string, :default => "", :null => false
t.column "content", :text, :default => ""
t.column "updated_at", :datetime
end
add_index "memopages", ["id"], :name => "sqlite_autoindex_memopages_1", :unique => true
:
scaffoldしたら、演習を参考にmigrate対応します。
migrateのテーブル生成スクリプトはこんなカンジ
class CreateMemoPage < ActiveRecord::Migration
def self.up
create_table :memopages do |t|
t.column :title, :string, :null => false
t.column :content, :text
t.column :updated_at, :datetime
end
end
def self.down
drop_table :memopages
end
end
migrateでテーブル作ると、スキーマのダンプから add_index 行がなくなるんですよね。
ま、いいか(いいのか?)
db\schema.db
----
create_table "memopages", :force => true do |t|
t.column "title", :string, :default => "", :null => false
t.column "content", :text, :default => ""
t.column "updated_at", :datetime
end
ActiveRecord使えば、異なるデータベースに対応するのも簡単ですね♪
ちょっとした個人用途やプロジェクトで使うくらいのアプリケーションならSQLiteで十分そうだし。
コメント
WindowsNT系(いまどき9x系もないでしょうが)ならば、
下記のように取得できますよ>ドライブ名
@echo off
echo %~d0
投稿者: babydaemons | 2009年09月08日 14:51