首页 > 解决方案 > 在 Cloud Foundry manifest.yml 中指定 postgresql 数据库名称

问题描述

有没有办法在 cloud Foundry manifest.yml 文件中指定要连接的 postgresql 数据库名称?我一直在翻阅文档,但尚未找到此特定信息。

我在想象这样的事情:

applications:
- name: my-app
  routes:
    - route: my-app.mybluemix.net
  services:
  - postgres
    dbname: database2

使用这种方法,可以仅通过VCAP_SERVICES解析模块提供的连接字符串(在节点的情况下为cfenv)建立 postgresql 连接。

如果这不可能,我将设置一个dbname环境变量并构建我自己的连接字符串。

标签: postgresqlibm-cloudcloud-foundry

解决方案


Cloud Foundry 应用程序 manifest.yml 中没有类似的东西。

manifest.yml 只接受服务实例名称的列表,具有这些名称的服务将绑定到您的应用程序。它不允许您设置其他元数据。

https://docs.cloudfoundry.org/devguide/deploy-apps/manifest-attributes.html#services-block

我不知道这些是否有帮助,但是当您cf bind-service直接使用时,您可以使用两个额外的规定(在我写这篇文章时 manifest.yml 不支持这些规定):

  • 任意绑定参数。除非您的服务代理支持它们,否则这些可能无济于事,但这是将附加信息传递给服务代理的一种方式。如果你的经纪人支持它,理论上你可以说给我一个名为 XYZ 的数据库,通过这种方式传递一些配置。

  • 命名服务绑定。这提供了相当于第二个名字的东西。目的是您可以创建名称为 X 的服务,但您的应用程序可以查找名称为 Y 的服务绑定。您可以使用它来交换不同名称的服务,但仍向应用程序公开相同的绑定名称,以便它总能找到服务。

如果您尝试将其他一些与服务实例相关的元数据传递给您的应用程序,则需要以其他方式进行。就像您想告诉它数据库名称或连接池大小等一样。使用您提到的环境变量是一种选择。您可以使用传递给您的应用程序的配置文件或 cli 参数。您选择的可能是您正在使用的库/框架中的偏好/支持问题。

对于它的价值,我见过的大多数服务代理都会通过并告诉您要使用的特定数据库名称。如果代理说连接到 db XYZ 并且您连接到 myCoolDb,则连接将失败。只是想提一下这个。你的旅费可能会改变。


推荐阅读