ActiveRecord: connection alla esistenza di variabile

Buongiorno a tutti.
Magari è qualcosa di molto semplice per chi conosce bene Rails, ma non
per un niubbo come il sottoscritto ^^
In quale file posso cambiare la connessione al db di tutti i modelli di
un’applicazione Rails, solamente se viene valorizzata una variabile di
ambi ente? Nel caso non esistesse questa variabile, varrebbe ciò che c’è
scritto in database.yml, come da comportamento standard.
Avrei necessità che questo controllo venisse effettuato all’avvio
dell’applicazione.
Ringrazio anticipatamente.

Ciao,
soluzione dirty, crei un nuovo environment in rails, aggiungi in
config/database.yml i dati di connessione alternativi:

nuovo_enviroment:
adapter: mysql
encoding: utf8
database: alt_db
username: alt_user
ect…

a questo punto fai il check della variabile in application.rb e setti
ENV[
‘RAILS_ENV’] con il nuovo enviroment o quello di default.

2013/12/12 Lobo C. [email protected]

Ciao immortale :slight_smile:

Di default, la tua applicazione può essere eseguita in differenti
modalità
(o più propriamente environment):

  • development
  • test
  • production

Senza specificare dei parametri, l’applicazione viene fatta partire con
l’environment development.

config/database.yml contiene le configurazioni della connessione al
database, suddivise per environment.

Per esempio, durante lo sviluppo locale potresti voler usare un database
che si trova nella tua stessa macchina (corrispondente all’indirizzo
127.0.0.1) mentre se la stessa applicazione dovesse essere messa in
esecuzione su un server su Internet (Amazon, Heroku, Google Computer
Engine, etc) potresti volerti connettere ad un database che si trova su
una
macchina dedicata (fornita quindi di uno specifico indirizzo IP).

Per far partire il server con l’environment development:

rails server --environment=development

o anche

rails server

mentre per farlo partire con l’environment production

rails server --environment=production

A questo punto ti chiedo se la tua richiesta provenga semplicemente
dalla
necessità di avere una configurazione di sviluppo locale e una
configurazione di produzione, perché in tal caso ti basterebbe
modificare
concordemente le relative sezioni di config/database.yml.
Diversamente, puoi creare un altro environment, come ha spiegato Rocco,
o
puoi aggiungere un comportamento dinamico a config/database.yml.

Per quest’ultimo caso, considera che puoi inserire degli snippet ERB
all’interno di config/database.yml, per esempio:

<% db_username = ENV[‘DB_USERNAME’] || ‘root’ %>
<% db_password = ENV[‘DB_PASSWORD’] || ‘’ %>

development:
adapter: mysql2
encoding: utf8
database: foo_development
pool: 5
username: <%= db_username %>
password: <%= db_password %>
host: localhost

seguito dall’invocazione del server:

DB_USERNAME=goofy rails server --environment=development

o più semplicemente:

DB_USERNAME=goofy rails server

comporterà la connessione al database foo_development su localhost con
il
nome utente “goofy” e la password “” (vuota).

Al posto di passare i parametri tramite ENV, una pratica comune per
permettere la condivisione di database.yml in un team consiste nel
creare
nella directory root del tuo progetto un file YAML dove inserire tutti i
parametri di connessione per l’environment development, aggiungendo tale
file YAML extra in .gitignore e caricandolo opportunamente dall’interno
di
database.yml.

Qualora avessi necessità di partire con una guida più generica su Rails,
ti
consiglio http://guides.rubyonrails.org/

Have Fun

2013/12/12 Lobo C. [email protected]

Maurizio De magnis wrote in post #1130426:

Ciao immortale :slight_smile:

Ehehe cultore del Main Man anche tu , eh? :wink:

A questo punto ti chiedo se la tua richiesta provenga semplicemente
dalla
necessità di avere una configurazione di sviluppo locale e una
configurazione di produzione, perché in tal caso ti basterebbe
modificare
concordemente le relative sezioni di config/database.yml.

La mia necessità, è quella di leggere dei parametri di avvio da un
application server Tomcat, nei quali sono memorizzati i dati per la
connessione al db, su cui è deployata un’applicazione Rails che gira
con JRuby.
Quindi i parametri non fanno parte della riga di comando di rails ma
forniti da Tomcat.

Per quest’ultimo caso, considera che puoi inserire degli snippet ERB
all’interno di config/database.yml, per esempio:

<% db_username = ENV[‘DB_USERNAME’] || ‘root’ %>
<% db_password = ENV[‘DB_PASSWORD’] || ‘’ %>

development:
adapter: mysql2
encoding: utf8
database: foo_development
pool: 5
username: <%= db_username %>
password: <%= db_password %>
host: localhost

Non sapevo si potessero usare gli snippet ERB direttamente dentro il
file database.yml.
Seguirò questo suggerimento, visto che a runtime, so già come leggere le
variabili passate dalla Virtual Machine.

Grazie!!!