メイン

[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で十分そうだし。

トラックバック

このエントリーのトラックバックURL:
http://pw.tech-arts.co.jp/cgi-bin/tamt32/mt-tb.cgi/51

コメント

WindowsNT系(いまどき9x系もないでしょうが)ならば、
下記のように取得できますよ>ドライブ名

@echo off
echo %~d0

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)