2011-09-08 96 views
15

哇我一直被困在這一天上。我在連接到Heroku上的database.yml時遇到問題。我在雪松和紅寶石1.9.2。我的開發和測試數據庫是sqlite3和prod數據庫是postgreSQL應付雪松規則。 這裏是我的Ruby腳本代碼:Heroku上的數據庫連接

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

一切順利的地方,但是當我推到Heroku的,我得到:

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

它看起來像Heroku的不喜歡我的數據庫。陽明海運。下面是一個概述:

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

你有沒有設法連接到數據庫?答案似乎並不包含完整的連接解決方​​案。 – baash05

回答

27

首先,Heroku的覆蓋config/database.yml有自己的Heroku的特定版本。這就是Heroku自動將您的應用程序連接到自己的postgresql數據庫的方式。爲了告訴Heroku你自己的posgresql數據庫,你應該設置正確的config variables,你不妨設置省略生產數據庫,因爲你的倉庫中的config/database.yml因爲Heroku無論如何都會忽略它。

其次,config/database.yml文件是針對YAML文件的ERB模板。您必須先通過評估Ruby(ERB)運行文件內容,然後才能通過YAML運行輸出,您必須必須

+0

好吧,如果我想讓Heroku在生產環境中共享數據庫,我只需刪除上面的三行,讓Heroku管理數據庫本身。 謝謝! – PEF

+0

正確。如果您想使用Heroku postgres插件(通過Heroku共享和專用的數據庫),請不要執行任何操作。如果你想使用Amazon RDS插件,也不要做任何事情。這兩個插件都設置你的應用程序的'DATABASE_URL'配置變量,Heroku的'config/database.yml'解析。如果你想使用你自己的數據庫服務器,你應該設置你的應用程序的'DATABASE_URL'配置變量指向你自己的數據庫服務器,並且你不應該碰到'config/database.yml'。 – yfeldblum

+8

如果你想看看你的config/database.yml中放入了什麼,只需做一個「heroku run bash」和「cat config/database.yml」;) –