SQLite è un database leggero conforme SQL. Il download è di circa 244kb (il client a linea di comando + DLL).
SQLite implementa la maggior parte dello standard SQL92 e non necessita di configurazioni. SQLite è una soluzione “solo client” che non necessita di un processo server separato.
Per i migliori risultati, utilizzate SQLite 3.3.4 o versioni successive.
Windows
Per utilizzare SQLite per windows avete bisogno di due files:
Questi possono essere scaricati come binari precompilati dall’ Homepage di SQLite
Aggiungete sqlite(3).exe e sqlite(3).dll al vostro percorso.
C:\ruby\bin
Unix
La maggior parte dei gestori di pacchetti inseriscono un file binario sqlite o sqlite3 nel vostro percorso.
Se lo compilate dai sorgenti, provate ‘/usr/local/bin/sqlite(3)’.
Se avete bisogno di memorizzare dati UTF-8 nel vostro database assicuratevi di fornire l’opzione —enable-utf8 allo script ./configure
Mac OS X fino alla versione 10.3.9
con DarwinPorts
<pre>
sudo port install sqlite3
sudo port install sqlite # for sqlite 2
</pre>
Mac OS X 10.4 (aka Tiger) e successivi
sqlite3 è parte integrante di Mac OS X 10.4. Il suo percorso è ‘/usr/bin/sqlite3’. Non avete bisogno di intallarlo.
Utilizzare gem per installare sqlite per Ruby
Windows
<pre>C:\work\rb\test>gem install sqlite-ruby
C:\work\rb\test>"c:\ruby\bin\ruby.exe" “c:\ruby\bin\gem” install sqlite
Attempting local installation of ‘sqlite’
Local gem file not found: sqlite*.gem
Attempting remote installation of ‘sqlite’
Select which gem to install for your platform (i386-mswin32)
1. sqlite-ruby 2.2.3 (ruby)
2. sqlite-ruby 2.2.3 (mswin32)
3. sqlite-ruby 2.2.2 (ruby)
…
>
Selezionate l’opzione 2.
Quando utilizzate SQLite 3:
<pre>C:\work\rb\test>gem install sqlite3-ruby
C:\work\rb\test>"c:\ruby\bin\ruby.exe" “c:\ruby\bin\gem” install sqlite3
Attempting local installation of ‘sqlite3’
Local gem file not found: sqlite3*.gem
Attempting remote installation of ‘sqlite3’
Select which gem to install for your platform (i386-mswin32)
1. sqlite3-ruby 1.1.0 (mswin32)
2. sqlite3-ruby 1.1.0 (ruby)
3. sqlite3-ruby 1.0.1 (ruby)
…
>
Selezionate l’opzione 1.
UNIX and Mac OS X
NOTA BENE: I sistemi UNIX e Mac OS X devono avere swig installato prima di installare i gem sqlite-ruby o sqlite3-ruby. Altrimenti gem non utilizzerà le attuali librerie sqlite, ma utilizzerà una versione di libreria sqlite in ruby puro che non funziona correttamente.
Su Mac OS X, potete installare SWIG utilizzando DarwinPorts come segue:
sudo port install swig
Poi installate il gem come segue:
sudo gem install sqlite3-ruby
A meno che non otteniate questo:
Attempting local installation of 'sqlite3'
Local gem file not found: sqlite3*.gem
Attempting remote installation of 'sqlite3'
ERROR: While executing gem ... (Gem::GemNotFoundException)
Could not find sqlite3 (> 0) in the repository
Vedrete il seguente:
Select which gem to install for your platform (powerpc-darwin8.0)
1. sqlite3-ruby 1.1.0 (ruby)
2. sqlite3-ruby 1.1.0 (mswin32)
3. sqlite3-ruby 1.0.1 (ruby)
...
11. Cancel installation
Scegliete la versione “(ruby)” con numero più alto, in questo caso l’opzione 1.
SQLite memorizza i databases in files. Per creare un nuovo database, eseguite il comando sqlite con un nome file per il vostro databse, e iniziate ad aggiungere le tabelle.
Windows
<pre>C:\work\rb\test>sqlite db\test.db
SQLite version 2.8.16
Enter ".help" for instructions
sqlite> create table articles
...> (id integer primary key,
...> title varchar(255),
...> text varchar(1024)
...> );
sqlite> .quit
C:\work\rb\test>dir db
Volume in drive C has no label.
Directory of C:\work\rb\test\db
14.04.2005 14:14 4 096 test.db
1 File(s) 4 096 bytes
C:\work\rb\test>
Unix e Mac OS X
In un sistema UNIX, e dato per assunto che abbiate un file che contiene una serie di istruzioni SQL per la creazione di questo database (per esempio da un’applicazione che state distribuendo), potete abbreviare l’operazione di creazione:
<pre>
$ mkdir ~/databases
$ sqlite3 ~/databases/rails-app.db < /path/to/schema.sql
SQLite version 3.1.2
Enter “.help” for instructions
sqlite> .schema
sqlite> .quit
SQLite non utilizza autenticazione e necessita solamente di un puntatore al file di database.
Il parametro adapter dice a Ruby di utilizzare SQLite come database.
<pre>development:
adapter: sqlite
dbfile: db/dev.db
test:
adapter: sqlite
dbfile: db/test.db
production:
adapter: sqlite
dbfile: db/prod.db
NOTA BENE: Se state utilizzando SQLite3 scrivete “sqlite3” invece di “sqlite” per il valore del parametro adapter.
Ed è fatta!
D: Ottengo degli errori quando provo ad installere il gem…
sudo gem install sqlite
Attempting local installation of ‘sqlite’
Local gem file not found: sqlite*.gem
Attempting remote installation of ‘sqlite’
Building native extensions. This could take a while…
ERROR: While executing gem … (RuntimeError)
ERROR: Failed to build gem native extension.
Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/sqlite-2.0.1 for inspection.
ruby extconf.rb install sqlite
checking for main() in -lsqlite… no
checking for sqlite.h… no
%{color:green} Ho avuto lo stesso problema. Usa
gem install sqlite-ruby -- --with-sqlite-dir=/opt/local — Kanwei %
R: Ci sono diverse possibili cause; se non hai Xcode installato il file header ruby.h è stato spostato da /usr/lib/ruby/1.8/powerpc-darwin8.0/ruby.h a /usr/lib/ruby/1.8/universal-darwin8.0/ruby.h. Come risultato non viene trovato da gem. Alcune persone hanno trovato che symlinks risolve il problema, ma molti lettori di comp.lang.ruby giudicano l’installazione di ruby dai sorgenti come l’installazione di ruby che viene distribuita con Tiger è ritenuto essere un pò bacato. —GrahamAshton
B: HO due versioni di Ruby installate via DarwinPorts. Sfortunatamente rb-rubygems era collegato alla vecchia (1.8.2). La mia soluzione è stata quella di disinstallare ruby (1.8.2 e 1.8.4) e rb-rubygems e reinstallarli dopo swig. —Michael
Ho ottenuto esattamente lo stesso errore, ma è risultato che Ubuntu Breezy non installa di default gcc, un veloce
lo ha risolto. Probabilmente non è rilevante con quello detto sopra dal momento che DarwinPorts è inutile senza gccsudo apt-get install gcc
Anche io ho ricevuto lo stesso errore (Ubuntu Breezy), ma era perchè il file sqlite3.h era mancante. Avete bisogno di libsqlite3-dev: sudo apt-get install libsqlite3-dev
D: Sto riscontrando degli strani errori sul database su Linux/Unix
R: Il gem sqlite è di default la versione in ruby pura, la quale non sempre funziona. La soluzione è:
R: Su Mac OS X 10.4 Tiger, prova a disinstallare il gem (sudo gem uninstall sqlite3), poi utilizza DarwinPorts per installare SWIG (sudo port install swig), poi reinstalla il gem SQLite3 (sudo gem install sqlite3).
D: La versione Windows mi dà un messaggio di errore come “Application failed to start because sqlite.dll was not found. Re-installing the application may fix this problem.”
R: Assicurati che .dll e .exe siano in uno dei persorsi specificati nella variabile di sistema PATH. Se hai installato sqlite3 allora usa per esempio ‘sqlite3 db\test.db’ per creare un database. Nel tuo file database.yml devi usare ‘adapter: sqlite3’.
D: SQLite::Exceptions::\DatabaseException file is encrypted or is not a database.
R: Sembra che i databases sqlite creati con la versione 2 non funzionino con sqlite versione 3 e viceversa.
D: SQLite restituisce “0.0” per i valori dalle viste del database.
R: Sembra che Rails pensi che il campo è un float? Puoi inserire numeri nei campi, ma le stringhe vengono mostrate come 0.0. Prova ad aggiungere un specificatore del tipo di campo (es. TEXT) nella definizione del database.
D: Utilizzando SQLite in Rails fa terminare il server webrick sollevando un segfaults del tipo “deadlock 0xb781a95c: run:-/usr/lib/ruby/1.8/drb/drb.rb:932: [BUG] Segmentation fault”. Qualche suggerimento?
R: Questo sembra essere un problema con sqlite-ruby. Probabilmente non lo hai installato correttamente. Guarda la domanda precedente riguardo a strani errori sul database. Su Mac OS X 10.4 Tiger, prova a disinstallare il gem (sudo gem uninstall sqlite3), poi utilizzate DarwinPorts o Fink per installare SWIG (sudo port install swig), assicurandovi che SWIG sia nel vostro PATH, poi reinstallate il gem SQLite3 (sudo gem install sqlite3).
D: Sembra che il metodo save di ActiveRecord non imposti l’id per la riga inserita dopo il salvataggio del record sul database SQLite. E’ un problema di SQLite o di ActiveRecord?
R: Assicuratevi che il campo ID sia settato come INTEGER PRIMARY KEY. Non INTEGER(10) PRIMARY KEY, INT PRIMARY KEY o qualsiasi altra variante. E’ Case sensitive. Potresti imbatterti nell’errore ‘id must not be NULL’.
D: Sto utilizzando Migrations e sto riscontrando lo stesso problema. ActiveRecord non imposta l’id dopo un salvataggio. Controllando lo schema del database, Ho: “id” INTEGER PRIMARY KEY NOT NULL. Qualche suggerimento?
D: Stesso qui – Sto utilizzando migrations per creare una tabella e l’id non viene impostato dopo un inserimento. Migrations sta creando la colonna id come INTEGER PRIMARY KEY NOT NULL. C’è qualche scappatoia?
D: WEBrick sta protestando su “\ArgumentError: No database file specified. Missing argument: dbfile”
R: sqlite3 utilizza il parametro “dbfile:” al posto di “database:”, che è facile da individuare mentre si modifica un file database.yml che è preconfigurato per MySQL.
D: ActiveRecord::Migration supporta SQLite?
R: Migrations sembra funzionare bene con SQLite in Rails 0.14.0 e successivi. Le migrations con SQLite migrations non sono supportate nelle precedenti versioni di Rails.
D: Sono un novizio quindi scusate questa domanda. Devo utilizzare la versione gem di Ruby-Sqlite, oppure funzionerà anche un ruby-sqlite non in versione gem? (Sono su *nix)
R;
Ubuntu Linux
Questo è quello che ha funzionato per me:
sudo apt-get install libsqlite3-0 libsqlite3-dev sqlite3 swig sudo gem install sqlite3-ruby # Select the highest Ruby version (ususally 1.)
Se non installate il pacchetto libsqlite3-dev, allora non avrete i files header di cui necessitate per compilare le estensioni native quando installate il Rubygem.
Spero che vi aiuti.
Debian sid
Per installare Ruby on Rails su Debian sid fate:
apt-get install rails sqlite3 sqlite3-ruby
Avete bisogno di utilizzare sqlite3 come adapter nel file config/database.yml.
::
category:HowTo
Se ricevete altri errori bizzarri, forse state utilizzando la sintassi MySql (anzichè dello “standard” SQL) per la creazione delle tabelle. L’esempio in questa pagina ha funzianato per me su Rails. -Max
Esempio di errore bizzarro:
SQLite3::SQLException: SQL logic error or missing database: INSERT INTO
Una possibile soluzione alternativa a questo tipo di errori è quello di controllare la proprietà (ownership) del file di database, sembra che qualche volta (i.e. rails 1.1 sqlite 3.2.8) il processo di scrittura (i.e. apache/webbrick) devono essere i proprietari del file di database (i.e. i permessi in scrittura non sono sufficienti) Io suppongo che questo ha qualcosa a che fare con il locking – occ