Ruby On Rails è stato sviluppato implementando con particolare attenzione le funzionalità destinate all’interazione del framework con i db e le informazioni in esse archiviate; tra i numerosi DBMS supportati da RoR, per citare soltanto alcuni di quelli rilsciati sotto licenza Open Source, è possibile fare riferimento a MySQL, SQLite e PostgreSQL.
sudo apt-get install mysql-server libmysqlclient-dev libmysql-ruby
Con il quale installeremo mysql.
Infine installiamo sqlite3 anche se non lo utilizziamo,in quanto è una dipendenza necessaria
sudo gem install sqlite3-ruby
sudo apt-get install libsqlite3-dev
Dato che il Database di riferimento per questa trattazione sarà MySQL, la prima operazione da compiere sarà quella relativa all’installazione della Gem necessaria per il dialogo tra RoR e Mysql, procediamo dando il comando:
gem install mysql
In alternativa (consigliata) è possibile installare la Gem “mysql2”, una libreria veloce e molto stabile per l’interazione con MySQL:
gem install mysql2
Fatto questo, dovremo recarci sulla directory d’installazione di RoR e raggiungere la cartella “project/my_app/config/” precedentemente creata tramite il comando “rails new”, in essa è presente il file “database.yml”; aprendolo con un editor di testo noteremo come di default il progetto presenti una configurazione relativa al DBMS SQLite:
# SQLite version 3.x # gem install sqlite3 # # Ensure the SQLite 3 gem is defined in your Gemfile # gem 'sqlite3' development: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: adapter: sqlite3 database: db/test.sqlite3 pool: 5 timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 pool: 5 timeout: 5000
Quest’ultima dovrà quindi essere modificata in modo da utilizzare MySQL come DB predefinito, prima di fare questo sarà però necessario fare riferimento ai tre ambienti previsti da RoR per l’interazione con le basi di dati:
“development”: è l’ambiente destinato allo sviluppo locale dell’applicazione prima delle fasi di test e di produzione (messa on-line);
“test”: è l’ambiente utilizzabile in seguito alla fase di sviluppo per l’esecuzione dei test automatizzati sull’applicazione prima della fase di produzione;
“production”: è l’ambiente a cui farà riferimento l’applicazione una volta resa pubblicamente disponibile come servizio.
Per modificare il file “database.yml” in modo che questo interagisca con MySQL, potremo quindi utilizzare delle nuove impostazioni di configurazione sul modello delle seguenti:
development: adapter: mysql2 encoding: utf8 database: my_app_development pool: 5 username: nome_utente password: password_utente host: localhost port: 3306 socket: /tmp/mysql.sock test: adapter: mysql2 encoding: utf8 database: my_app_test pool: 5 username: nome_utente password: password_utente host: localhost port: 3306 socket: /tmp/mysql.sock production: adapter: mysql2 encoding: utf8 database: my_app_production pool: 5 username: nome_utente password: password_utente host: localhost port: 3306 socket: /tmp/mysql.sock
Note: l’encoding,il socket e pool non sono obbligatori
Una volta effettuate e salvate le modifiche richieste (ricordiamoci di modificare il parametri associati a “username” e “password” con quelli relativi alla nostra installazione di MySQL), RoR ci permetterà di creare i database di sviluppo e test precedentemente definiti da terminale. Per fare ciò utilizzeremo un’istruzione basata sulla Gem “rake”, per prima cosa, quindi, dovremo installare quest’ultima da un qualsiasi percorso sul file system:
Digitiamo il comando:
gem install rake
Rake è in pratica un “command runner”, cioè un tool che ci permetterà di accedere velocemente a comandi Rails utili per lo sviluppo della nostra applicazione e di interagire con la base di dati;
ora finalmente potremo lanciare il comando per la generazione del db dal percorso della nostra applicazione:
C:\Ruby193\project\my_app>rake db:create