# ActiveRecord: connection alla esistenza di variabile

**URL:** <https://www.ruby-forum.com/t/activerecord-connection-alla-esistenza-di-variabile/238020>\
**Category:** IT\
**Created:** [December 12, 2013, 10:30am UTC](https://www.ruby-forum.com/t/activerecord-connection-alla-esistenza-di-variabile/238020 "2013-12-12T10:30:23Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![musicdenotation](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ea666f/32.png) [@musicdenotation](https://www.ruby-forum.com/u/musicdenotation)\
**Post date:** [December 12, 2013, 10:30am UTC](https://www.ruby-forum.com/t/activerecord-connection-alla-esistenza-di-variabile/238020/1 "2013-12-12T10:30:23Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![lobo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/76d3ee/32.png) [@lobo](https://www.ruby-forum.com/u/lobo)\
**Post date:** [December 12, 2013, 11:13am UTC](https://www.ruby-forum.com/t/activerecord-connection-alla-esistenza-di-variabile/238020/2 "2013-12-12T11:13:35Z")

</div>

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. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![lobo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/76d3ee/32.png) [@lobo](https://www.ruby-forum.com/u/lobo)\
**Post date:** [December 12, 2013, 11:56am UTC](https://www.ruby-forum.com/t/activerecord-connection-alla-esistenza-di-variabile/238020/3 "2013-12-12T11:56:51Z")

</div>

Ciao immortale 🙂

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/](http://guides.rubyonrails.org/)

Have Fun

2013/12/12 Lobo C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![lobo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/76d3ee/32.png) [@lobo](https://www.ruby-forum.com/u/lobo)\
**Post date:** [December 12, 2013, 2:18pm UTC](https://www.ruby-forum.com/t/activerecord-connection-alla-esistenza-di-variabile/238020/4 "2013-12-12T14:18:22Z")

</div>

Maurizio De magnis wrote in post #1130426:

> Ciao immortale 🙂

Ehehe cultore del Main Man anche tu , eh? 😉

> 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!!!
