Heroku 'Writing config/database.yml to read from DATABASE_URL' 是什么意思?

标签 heroku

当我的应用程序基于 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 时,如果您有 config目录,Ruby build pack writes a new database.yml file ,并生成您在执行时看到的消息。

导轨 runs this file through ERB when loading it ,允许各种动态选项。 Heroku 利用这一点,生成一个读取 DATABASE_URL 的 ERB 文件。环境变量并创建适当的 .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 上获取正确的值。

关于Heroku 'Writing config/database.yml to read from DATABASE_URL' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379530/

相关文章:

heroku - 如何在heroku应用程序中使用npm pdf图像包

ruby-on-rails - Rails : Populate Heroku database with development. sqlite3 数据

heroku - Heroku 免费套餐是否会限制 SEO 功能?

django - 在 Heroku 中创建一个新目录

perl - 更新 Heroku 上的堆栈

node.js - 如何在 nodejs 中使用 PostgreSQL 从 nodejs 导出 csv 文件

reactjs - Heroku 没有这样的文件或目录,stat '/app/client/build/index.html'

angular - Heroku 部署问题 sh : 1: ng: not found?

django - htaccess 在 heroku 上用于 django 应用程序

ruby-on-rails - 为什么安装 Heroku Toolbelt 会破坏我的 Rails 开发环境