【问题标题】:Heroku what does 'Writing config/database.yml to read from DATABASE_URL' mean?Heroku 'Writing config/database.yml to read from DATABASE_URL' 是什么意思?
【发布时间】:2012-09-11 23:58:48
【问题描述】:

当我的应用基于 Heroku 构建时,它会说

Writing config/database.yml to read from DATABASE_URL

这是什么意思?这是 Cedar 堆栈的新功能吗?

我有一个 Rack 应用程序。我的 config.ru 曾经在 Barmy Bamboo 堆栈上工作:

#!/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。现在在 Cedar heroku run cat config/database.yml 上检查它,它似乎是一个 Ruby 文件,而不是 yml。这种变化在任何地方都有解释吗?

【问题讨论】:

    标签: heroku


    【解决方案1】:

    当您将应用程序推送到 Heroku 时,如果您有一个 config 目录,则为 Ruby build pack writes a new database.yml file,并生成您看到的消息。

    Rails runs this file through ERB when loading it,允许各种动态选项。 Heroku 利用这一点,生成一个 ERB 文件,该文件读取 DATABASE_URL 环境变量并创建指向该数据库的适当 .yml 文件。

    我假设在 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 上获取正确的值。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多