SQLite 3 is ideaal voor die kleine rails testappjes die je elke keer aanmaakt om dingen uit te proberen. Als ik bijvoorbeeld een artikel lees over counter_cache, dan wil ik daar gelijk een losstaande rails app voor maken met alleen dat voorbeeld. Geen extra andere dingen. De code is dan meteen duidelijk als ik er weer op terug moet grijpen.
Voor dit soort zaken is SQLite3 ideaal.
- Supersimpele yaml file.
- File based in je rails directory.
- Werkt met migrations.
- Je app map zippen en je hebt alles bij je !
UPDATE → rails 2.0.2
Vanaf rails 2.0.2 is SQLIte3 ook de default database adapter.
Dus het meegeven van de optie -d sqlite3 is niet meer nodig.
Dit artikel gaat uit van een installatie onder /usr/local.
Verder nog een directory source ergens op je disk. Op de mac zou dat bijvoorbeeld de volgende directory kunnen zijn vanuit terminal.
> cd /Users/je_naam_hier/Documents/source
Heb je die directory niet, dan even aanmaken of naar de map van je eigen keuze navigeren voor dit artikel.
> mkdir /Users/je_naam_hier/Documents/source
> cd /Users/je_naam_hier/Documents/source
Dus vanuit de map source gaan we nu de software downloaden en installeren.
> curl -O http://www.sqlite.org/sqlite-3.3.17.tar.gz
> tar xzf sqlite-3.3.17.tar.gz
> cd sqlite-3.3.17
> ./configure --prefix=/usr/local
> make
> sudo make install
En dat is eigenlijk alles als het gaat om SQLite3.
Nu nog even de laatste rubygem installeren die werkt met SQLite3.
> sudo gem install sqlite3-ruby
> Password:
Als het goed is volgt er nu een keuzelijst betreffende je platform.
Select which gem to install for your platform (i686-darwin8.6.2)
1. sqlite3-ruby 1.2.1 (mswin32)
2. sqlite3-ruby 1.2.1 (ruby)
3. sqlite3-ruby 1.2.0 (mswin32)
4. sqlite3-ruby 1.2.0 (ruby)
5. Skip this gem
6. Cancel installation
Op de Mac en andere unix'en kies je de hoogste ruby versie tussen haakjes.
In deze installatie is dat keuze 2.
Als het goed is hebben we nu een werkende SQLite3 die we kunnen gebruiken met Ruby on Rails. We gaan dat even checken in terminal:
> which sqlite3
/usr/local/bin/sqlite3
> sqlite3 --version
3.3.17
> gem list --local
...
sqlite3-ruby (1.2.1)
SQLite3/Ruby is a module...
OK. Alles werkt. Nu rails.
We zitten nog in onze source directory dus we gaan naar onze eigen rails dir, en gaan even een demo app maken om te testen.
> cd rails #hier je eigen directory kiezen uiteraard
> rails demo
> cd demo
Als we nu naar onze yaml file kijken dan ziet dat er als volgt uit.

Geweldig natuurlijk. Geen passwords, en zoals je ziet staat er db/ voor de naam van de .sqlite3 file. Dat is de db directory waar ook de migrations bewaard worden.
Op dit moment hebben we echter alleen nog maar aangegeven dat we SQLite3 willen gebruiken. Of het werkt weten we nog niet, dus dat gaan we even testen.
We zitten nog steeds in onze demo directory en gaan nu een model aanmaken.
> script/generate model werknemer
Bij het aanmaken van dit model is er ook een migration file aangemaakt in de db map van onze app. Hier zal als het goed is straks ook de sqlite3 file aangemaakt worden.
We gaan de migration file '001_create_werknmers.rb' als volgt aanpassen:
UPDATE → rails 2.0.x
Dit is tevens de nieuwe syntax voor migrations.

We maken het attribuut naam en gaan nu de migration verwerken:
> rake db:migrate
== CreateWerknemers: migrating
-- create_table(:werknemers)
== CreateWerknemers: migrated (0.0031s)
En de migration is aangemaakt zonder errors van sqlite3.
Even nog een final check om te kijken of we wat kunnen bewaren.
> script/console
Loading development environment.
>> Werknemer.count
=> 0
>> w = Werknemer.new :naam => 'Bianca'
>> y w
--- !ruby/object:Werknemer
attributes:
naam: Bianca
new_record: true
>> w.save
=> true
>> wn = Werknemer.find 1
=> # Werknemer:0x247c358 @attributes={"id"=>"1", "naam"=>"Bianca"}
En inderdaad, het werkt als de bekende speer.
En zo ziet het er dan in de db directory uit:

Alles bij elkaar inclusief de data. Dus gewoon zippen die hele directory en uitpakken bij iemand met ook SQLite3 is natuurlijk ideaal want dat werkt direct. Ik vind het ook wel lekker dat ik niet mijn MySQL db aan het vervuilen ben. Nee, gewoon alles bij elkaar.
Veel plezier !