连接到现有的 Heroku Postgres 数据库以供 Sinatra 应用程序使用。

4
我正在使用Salesforce作为我的CRM,但需要查询数据(多个记录,因此不能使用Zapier)以供基于Heroku的Sinatra应用程序使用。 Heroku提供了一项服务,定期将Salesforce对象复制到Postgres表中,从而使我的数据脱离了Salesforce。
我以前编写过Sinatra应用程序,并在Heroku上托管过,因此我对设置本地开发数据库然后通过许多教程将其推送到生产环境的过程有些熟悉。 但是,我遇到了一个问题,即找不到任何信息来允许我连接到已经填充所需数据的现有生产Postgres DB,同时没有必要创建和连接到本地dev db。
Heroku向我提供了以下信息: enter image description here 我应该如何以安全的方式插入这些各种凭据,以便我的以下文件具有正确的信息来连接Venue__c和Spaces__c表? app.rb /config - database.yml - environments.rb
3个回答

3
假设您正在使用 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
@csakon:是的,这将直接连接到Heroku上的数据库。如果您需要开发数据库,则有几个选项。您可以设置一个辅助销售账户,并为其设置一个新的Postgres数据库进行同步,并在其之上进行开发。或者,如果您不关心同步,则可以设置本地的Postgres数据库,并将数据从实时转移到dev(有关更多详细信息,请参见此处:https://devcenter.heroku.com/articles/heroku-postgres-import-export#restore-to-local-database) - gwcodes
我并不在意是否拥有一个开发数据库环境(你的代码可能应该写成“生产环境:”?但更重要的是,我遇到的问题是连接问题。我已经使用你提供的代码,但它无法连接(内部服务器错误)。我想知道如果我连接到一个已经存在数据的现有数据库与从头开始设置一个数据库是否有所不同。 - csakon
1
这里故意使用了 development,以允许您的开发服务器连接到数据库;但是如果您在生产模式下运行服务器,当然也可以使用 production。我建议在本地以开发模式运行,然后发布日志 - 这应该会给您比“内部服务器错误”更详细的错误信息。 - gwcodes
@csakon:如果您在database.yml的“开发部分”中使用您的“生产数据库”配置值,它是否有效?错误显示您尝试连接的数据库中没有名为“your_username”的角色。 - gwcodes
显示剩余2条评论

0

0
Heroku 会通过环境变量中的 URL 向您发布数据库凭据。您应该能够通过 ENV.fetch("DATABASE_URL") 访问它。根据您使用的 ORM,您将使用不同的方式连接到数据库,例如,Sequel 可以直接使用此值作为参数连接到 Sequel.connect(ENV.fetch("DATABASE_URL"))
由于您似乎使用的是 ActiveRecord,因此您可以使用 this post 中建议的 ActiveRecord::Base.establish_connection(...),该文章还演示了如何解析 URL(这可能不再必要)。这不能直接转换为 database.yml,但由于您不打算使用 Rails,因此您将不得不提供自己版本的 environment.rb 或类似文件,并且在那个位置很容易完成。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接