ThuisBalletje
TrainingenBalletje
ConsultancyBalletje
Blog Balletje
SQLite3 in Rails en Tiger
08-07-2007

Perfect voor development !

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.


Installatie SQLite3

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.


yaml


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.


migr_01


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:


db_01


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 !