5

私のアプリがHerokuで構築されている場合、

Writing config/database.yml to read from DATABASE_URL

どういう意味ですか?これはCedarスタックにとって新しいものですか?

ラックアプリを持っています。私config.ruはBarmyBambooスタックで作業していました:

#!/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

私自身のコンピューターでは、ローカルconfig/database.yml(ソース管理にコミットされていない)を読み取ります

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

そして、HerokuではHerokuのを読みますdatabase.yml。Cedarheroku run cat config/database.ymlで調べてみると、ymlではなくRubyファイルのようです。この変更はどこかで説明されていますか?

4

1 に答える 1

8

アプリをHerokuにプッシュすると、configディレクトリがある場合、Rubyビルドパックは新しいdatabase.ymlファイルを書き込み、そのときに表示されるメッセージを生成します。

Railsは、このファイルをロードするときにERBを介して実行し、さまざまな動的オプションを許可します。Herokuはこれを利用して、DATABASE_URL環境変数を読み取り、.ymlそのデータベースを指す適切なファイルを作成するERBファイルを生成します。

Bambooの場合、database.yml作成されたのはデータベースを指すプレーンなYamlファイルであると想定しています(参照が見つかりません)。

アプリをCedarで動作させるには、Railsと同じ方法でERBを介してファイルを実行する必要があります。これを変える:

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

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

ローカルdatabase.ymlが単なるyamlである場合、このようにERBを実行することはノーオペレーションであるはずであり、Herokuで適切な値を取得します。

于 2012-09-12T01:40:33.227 に答える