/ / Inizializzazione di Mongoid senza .load () - ruby, mongodb, heroku, orm, mongoid

Inizializzazione di Mongoid senza .load () - ruby, mongodb, heroku, orm, mongoid

Ho la seguente riga nella mia app di Sinatra:

Mongoid.load!("./config/database/mongoid.yml")

Questo è bello, ma non voglio mantenere i dettagli della mia connessione in un file YAML e aggiungerlo a .gitignore. Voglio tenerli dentro ENV.

Sono stato in grado di bypassare questo in passato aggiungendo cose come username: <%= ENV["MONGODB_USER"] %> al file di configurazione YAML, quindi leggerlo come ERB, salvarlo e leggerlo di nuovo con Mongoid.load! prima che Heroku pulisse il disco. Inutile dire che è piuttosto pazzesco.

Tutto quello che ho trovato è la definizione di .load! qui e non sembra che ci sia un modo per aggirare questo.

C'è un modo nascosto per configurare a livello di programmazione Mongoid connessioni?

Grazie in anticipo.

risposte:

3 per risposta № 1

Costruire su la risposta di mu:

Puoi dare a Mongoid un hash da utilizzare per l'inizializzazione in questo modo:

Mongoid.load_configuration(clients: {
default: {
database: database,
hosts: [ host ]
}
})

Si noti che l'hash si passa a load_configuration non è previsto che inizi con una chiave di ambiente come si farebbe normalmente mongoid.yml.


2 per risposta № 2

Mongoid.load! non fa molto:

def load!(path, environment = nil)
settings = Environment.load_yaml(path, environment)
if settings.present?
Sessions.disconnect
Sessions.clear
load_configuration(settings)
end
settings
end

Tutto ciò che fa è un po 'di contabilità, carica lo YAML e consegna a load_configuration fare il sollevamento pesi. Non c'è niente che ti impedisca di costruire il settings Hash a mano e chiamando Mongoid.load_configuration te stesso.