【问题标题】:Connecting to existing Heroku Postgres DB for Sinatra app连接到现有 Heroku Postgres DB for Sinatra 应用程序
【发布时间】:2017-08-17 22:09:43
【问题描述】:

我正在为我的 CRM 使用 Salesforce,但需要为基于 Heroku 的 Sinatra 应用程序查询数据(多条记录,所以没有 Zapier)。 Heroku 提供了一项服务,可以定期将 Salesforce 对象复制到 Postgres 表中,从而将我的数据从 Salesforce 中取出。

我之前编写了一个 Sinatra 应用程序并将其托管在 Heroku 上,因此我对在本地设置开发数据库然后通过许多教程将其推送到生产环境的过程有点熟悉。但是,我在查找任何信息时遇到了问题,这些信息将允许我连接到现有的生产 Postgres 数据库,该数据库已经填充了我需要的数据,而无需创建和连接到本地开发数据库。

Heroku 为我提供了以下内容

如何以及在何处安全地插入这些不同的凭据,以便我的以下文件具有连接到表 Venue__c 和 Spaces__c 的正确信息?
应用程序.rb
/配置
- 数据库.yml
- 环境.rb

【问题讨论】:

    标签: ruby postgresql heroku salesforce sinatra-activerecord


    【解决方案1】:

    假设您有ActiveRecord,这应该只是正确配置您的database.yml 的情况。例如,要直接连接您的开发环境,请使用以下内容:

    # database.yml
    development:
      adapter: postgresql
      encoding: unicode
      database: your_database
      username: your_user
      password: your_password
      host: your_host
      port: your_port
    
    # or alternatively, using the URI
    development:
      url: postgres://your_user:your_password@your_host/your_database
    

    【讨论】:

    • 开发数据库有必要吗?您的解决方案是否建议我可以使用实时 Heroku Postgres 数据库作为我的开发数据库?我正在使用 ActiveRecord,但我没有运行任何 rake,考虑到这个数据库会定期自动将数据推送到它,我需要做些什么吗?
    • @csakon:是的,这将直接连接到 Heroku 上的数据库。如果您需要开发数据库,​​有几个选项。您可以设置一个辅助 Salesforce 帐户并设置一个新的 Postgres 数据库,以便与之同步,并在此基础上进行开发。或者,如果您不关心同步,那么您可以设置一个本地 Postgres 数据库并将您的数据从实时导入到开发(有关更多详细信息,请参见此处:devcenter.heroku.com/articles/…
    • 我真的不关心开发数据库环境(您的代码可能应该说“生产:”?但更重要的是,我遇到的问题是连接,我已经有了代码你在上面提供了,但它只是没有连接(内部服务器错误)。我想知道如果我用现有数据连接到现有数据库与从头开始设置一个数据库,我是否会做一些不同的事情。
    • development 在这里是故意的,以允许您的开发服务器连接到数据库;但是如果你在生产模式下运行你的服务器,你当然也可以使用production。我建议在开发模式下本地运行,然后发布日志 - 它应该给你一个比“内部服务器错误”更多信息的错误
    • 我在 /ra054100000DMnRF/chad/stinson 收到 ActiveRecord::NoDatabaseError 致命:角色“your_username”不存在,您可以在此处查看:evernote.com/shard/s2/sh/b36d645d-3f86-4f8c-af01-1f019d97c9ea/…
    【解决方案2】:

    Heroku 通过环境变量中的 URL 向您发布数据库凭据。您应该可以通过ENV.fetch("DATABASE_URL") 访问它。根据您的 ORM,您将使用不同的方式连接到您的数据库,例如Sequel 可以直接将此值用作Sequel.connect(ENV.fetch("DATABASE_URL")) 的参数。

    当您似乎使用ActiveRecord 时,您可以使用ActiveRecord::Base.establish_connection(...) 中的建议this post,这也举例说明了如何解析URL(这可能不再需要)。这不会直接转换为 database.yml,但由于您不打算使用 Rails,因此您必须提供自己的 environment.rb 或类似版本,在那个地方应该很容易做到。

    【讨论】:

      【解决方案3】:

      原来 Heroku 有一个很棒的教程,它不仅连接到复制的数据库,而且也是为 Sinatra 编写的。

      https://devcenter.heroku.com/articles/getting-started-with-heroku-and-connect-without-local-dev#introduction

      【讨论】:

        猜你喜欢
        • 2016-08-14
        • 2023-03-14
        • 2013-03-02
        • 2011-07-02
        • 1970-01-01
        • 2021-09-09
        • 2015-03-19
        • 2013-09-17
        • 2015-08-14
        相关资源
        最近更新 更多