【问题标题】:Heroku App is Reading database.yml FileHeroku 应用正在读取 database.yml 文件
【发布时间】:2016-02-11 16:19:44
【问题描述】:

据我所知,Heroku 应该会自动生成一个 database.yml 文件,而忽略本地文件。但是,我看到一个不正确的错误,并且我对本地 database.yml 的更改正在影响 Heroku 应用程序。这是有问题的,因为我不知道应该如何设置文件的生产部分,以便 Heroku 可以找到正确的数据库。

例如以下

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

其次是 db:migration

$:~/Apps/DancingCupid/DancingCupid$ heroku rake --trace db:migrate

吐出来

rake aborted!
unable to open database file
/app/.bundle/gems/ruby/1.8/gems/activerecord-3.0.5/lib/active_record/connection_adapters/sqlite3_adapter.rb:27:in `initialize' 
...

根据我发送用于生产的数据库类型,我可能会遇到不同的错误。

除了删除应用并制作新应用之外,有没有办法解决这个问题?

【问题讨论】:

  • 它究竟是如何影响它的?
  • 关于是否应该将 database.yml 推送到 heroku 的任何答案?

标签: ruby-on-rails ruby heroku


【解决方案1】:

Heroku 肯定会在推送时重写您的 database.yml,因此源代码控制中的内容无关紧要。

要确认这一点,请执行heroku run bash,这会将您连接到应用程序中的 bash 会话,然后查看 cat config\database.yml,您将看到他们是如何重写它的。

【讨论】:

    【解决方案2】:

    其他答案不再是不正确了as of Rails 4.1。

    当 Rails 4.1.0 时,config/database.yml 将不再被覆盖 检测到 RC1 应用程序。相反,它将与 DATABASE_URL 合并,因此 可以在 config/database.yml 中设置池大小等其他选项。

    要在 Heroku 服务器上仔细检查 database.yml 的内容,您可以通过heroku run bash 运行远程 bash,然后通过 cat config/database.yml 在服务器上查看其内容并与本地的内容进行比较。

    【讨论】:

      【解决方案3】:

      我不认为你疯了! (但我认为我是)

      我这几天一直在努力解决这个问题,终于找到了这篇文章: http://article.gmane.org/gmane.comp.lang.ruby.rails.heroku/1003/match=database+yml

      这让我相信这可能根本不是我的代码!

      然后我简单地销毁了我的 heroku 应用程序并创建了一个新应用程序,然后推送到它。突然一切正常!我不知道如何、何时或为什么,但我认为有可能覆盖或损坏 Heroku 创建的 database.yml 文件。

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        尝试从版本控制中删除 database.yml。将database.yml 复制到database.yml.example 之类的文件中并将database.yml 添加到您的.gitignore 文件中是一种很好的做法。

        这样当你推送到 Heroku 时,它不会有任何数据库配置可供参考。

        您可能也不希望在生产中使用 sqlite3 gem。确保它位于 Gemfile 的开发/测试组中。

        【讨论】:

        • 我试过这个,然后我收到一个错误,抱怨我的 database.yml 文件丢失。似乎当 heroku 被冲洗时,你会得到我得到的错误。
        • 您是在本地还是在 Heroku 上收到 database.yml 缺失错误?你仍然需要database.yml,只是不在版本控制中。复制它,添加到.gitignore。 git rm它。然后恢复您的本地副本。
        • 没有。我的意思是我在 Heroku 上遇到了这个错误。它是一个错误。我也向 Heroku 报告了这件事。我认为可能有解决方法。
        【解决方案5】:

        database.yml 不应推送到 Heroku。它将尝试连接到该数据库,超时然后崩溃。

        将它添加到您的 .gitignore 中,这样它就不会出现在那里。

        【讨论】:

        • 很抱歉,但事实并非如此。 heroku 将在你的数据库上编写自己的 database.yml。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2013-11-19
        • 2017-05-11
        • 2018-11-09
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        相关资源
        最近更新 更多