2011-09-08 28 views
15

うわー私は数日間この1つにこだわってきました。私はHerokuのdatabase.ymlに接続する際に問題があります。私はCedarとRuby 1.9.2です。私の開発者とテストDBはsqlite3であり、prod dbはCedarルールに対応するpostgreSQLです。Herokuのデータベース接続

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

すべてが地元でよく行くが、私はHerokuのにプッシュするとき、私が取得: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' 

は、ここに私のRubyスクリプト内のコードです。 yml。ここでは概要です:

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の独自のHerokuの固有のバージョンを使用してconfig/database.ymlを上書きします。これは、Herokuが自動的にアプリケーションを独自のPostgreSQLデータベースに接続する方法です。 Herokuにあなた自身のposgresqlデータベースについて教えてもらうには、正しいを設定してください。のリポジトリにあるconfig/database.ymlの実動データベースは、Herokuが無視するため、省略します。

第2に、config/database.ymlファイルは、ERBテンプレートのYAMLファイルです。 は、YAMLを介して出力を実行する前に、評価されたRuby(ERB)を介してファイルの内容を最初に実行する必要があります。

+0

OKですので、Herokuが実稼働環境でDBを共有したい場合は、上記の3行を削除し、HerokuにDBそのものを管理させてください。 ありがとう! – PEF

+0

正しい。 Heroku postgres addon(Herokuを介して共有された専用データベース)を使用する場合は、何もしないでください。 Amazon RDSアドオンを使用する場合は、何もしないでください。これらのアドオンの両方がアプリケーションの 'DATABASE_URL'設定変数を設定します。これはHerokuの' config/database.yml'が解析します。独自のデータベースサーバを使用する場合は、アプリケーションの 'DATABASE_URL'設定変数を自分のデータベースサーバを指すように設定し、' config/database.yml'に触れないでください。 – yfeldblum

+8

herokuがあなたのconfig/database.ymlに入れていることを見たいのであれば、 "heroku run bash"と "cat config/database.yml";) –

関連する問題