2011-09-08 20 views
15

Wow Sono stato bloccato su questo per giorni. Ho problemi con la connessione a database.yml su Heroku. Sono su Cedar e rubino 1.9.2. Le mie dev e test dbs sono sqlite3 e prod db è postgreSQL per far fronte alle regole Cedar. Ecco il codice nel mio script ruby:Connessione al database su Heroku

Rails.env.production? ? (env = "production") : (env = "development") 
dbconfig = YAML::load(File.open('config/database.yml'))[env] 
ActiveRecord::Base.establish_connection(dbconfig) 

Tutto va bene nel locale, ma quando spingo a Heroku, ottengo:

ArgumentError: syntax error on line 17, col 0: `adapter = uri.scheme' 
from /usr/local/lib/ruby/1.9.1/syck.rb:135:in `load' 

Sembra Heroku non piace il mio database. yml. Ecco una panoramica:

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

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

production: 
    adapter: postgresql 
    encoding: unicode 
    database: foo 
    port: 5432 
    host: foobar.amazonaws.com 
    username: foo 
    password: bar 
+0

sei mai riuscito a connettersi al database? La risposta non sembra davvero comprendere una soluzione completa per il collegamento. – baash05

risposta

27

In primo luogo, Heroku sovrascrive tua config/database.yml con la propria versione di Heroku-specifica. Ecco come Heroku collega automaticamente la tua applicazione ai suoi database postgresql. Per dire a Heroku del tuo database posgresql, dovresti impostare il corretto config variables e potresti anche omettere il database di produzione dal tuo config/database.yml nel tuo repository perché Heroku lo ignorerà comunque.

In secondo luogo, il file config/database.yml è un modello ERB per un file YAML. È necessario deve prima eseguire il contenuto del file tramite valutato Ruby (ERB) prima di eseguire l'output tramite YAML.

+0

OK, quindi se voglio mantenere Heroku condiviso il DB in produzione, ho appena cancellato le tre righe sopra e ho lasciato che Heroku gestisse il DB stesso. Grazie! – PEF

+0

corretto. Se si desidera utilizzare l'addon Postgres di Heroku (database condivisi e dedicati tramite Heroku), non fare nulla. Se si desidera utilizzare l'addon di Amazon RDS, non fare nulla. Entrambi i componenti aggiuntivi impostano la variabile di configurazione 'DATABASE_URL' della tua applicazione, che analizza' config/database.yml' di Heroku. Se si desidera utilizzare il proprio server di database, è necessario impostare la variabile di configurazione 'DATABASE_URL' della propria applicazione in modo che punti al proprio server di database e non si dovrebbe toccare il proprio' config/database.yml'. – yfeldblum

+8

Se vuoi vedere cosa heroku mette nel tuo config/database.yml fai semplicemente un "heroku run bash" e "cat config/database.yml";) –

Problemi correlati