2012-09-11 11 views
5

Quando la mia app è costruita su Heroku si diceHeroku cosa significa "Scrivere config/database.yml per leggere da DATABASE_URL"?

Writing config/database.yml to read from DATABASE_URL 

Che cosa vuol dire? È nuovo nello stack Cedar?

Ho un'app Rack. Il mio config.ru usato per lavorare su Barmy Bamboo impilare:

#!/usr/bin/ruby 
environment = ENV['DATABASE_URL'] ? 'production' : 'development' 

require './pb.rb' 

dbconfig = YAML.load(File.read('config/database.yml')) 
Pb::Models::Base.establish_connection dbconfig[environment] 
Pb.create if Pb.respond_to? :create 

run Pb 

Sul mio computer che avrebbe letto il mio locale config/database.yml (che non si impegna a controllo del codice sorgente)

development: 
    adapter: sqlite3 
    database: db/development.sqlite3 
    pool: 5 
    timeout: 5000 

E su Heroku sarebbe leggere Heroku's database.yml. Ispezionandolo ora su Cedar heroku run cat config/database.yml, sembra un file Ruby e non yml. Questo cambiamento è spiegato da qualche parte?

risposta

8

Quando si spinge l'app su Heroku, se si dispone di una directory config, Ruby build pack writes a new database.yml file e si produce il messaggio che viene visualizzato quando viene eseguito.

Rails runs this file through ERB when loading it, per consentire varie opzioni dinamiche. Heroku fa uso di questo, producendo un file ERB che legge la variabile di ambiente DATABASE_URL e crea il file appropriato .yml che punta a quel database.

Suppongo che nel caso di Bamboo lo database.yml che è stato creato fosse un semplice file Yaml che punta al database (non riesco a trovare alcun riferimento).

Per far funzionare l'app su Cedar, è necessario eseguire il file tramite ERB come fa Rails. Modificare questa:

dbconfig = YAML.load(File.read('config/database.yml')) 

a

require 'erb' 
dbconfig = YAML.load(ERB.new(File.read('config/database.yml')).result) 

Se il locale database.yml è solo yaml pianura, che attraversa ERB come questo dovrebbe essere un no-op, e sarà raccogliere i giusti valori su Heroku.

+0

Grazie Matt, questo era esattamente il problema. –

+0

Ha scritto in Heroku, ha chiesto loro di aggiornare i documenti. Lo hanno fatto, grazie Heroku! https://devcenter.heroku.com/articles/cedar-migration#postgres –