Forum: Italian Ruby user group ActiveRecord: connection alla esistenza di variabile

367d179850f31fba29f438d024666fda?d=identicon&s=25 Lobo Czarnian (lobo)
on 2013-12-12 10:30
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.
2dd4747f79885cbdb629d703a9a64ff4?d=identicon&s=25 Rocco Galluzzo (byterussian)
on 2013-12-12 11:13
(Received via mailing list)
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 Czarnian <superion@interfree.it>
321db48bf4bdf48da05e781325aed20a?d=identicon&s=25 Maurizio De magnis (olistik)
on 2013-12-12 11:56
(Received via mailing list)
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/

Have Fun

2013/12/12 Lobo Czarnian <superion@interfree.it>
367d179850f31fba29f438d024666fda?d=identicon&s=25 Lobo Czarnian (lobo)
on 2013-12-12 14:18
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!!!
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.