在 cloud foundry 中指定 postgresql 数据库名称 manifest.yml

Specify postgresql database name in cloud foundry manifest.yml

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

我正在想象这样的事情:

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

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

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

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

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

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

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

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

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

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

就其价值而言,我见过的大多数服务代理都会传入并告诉您要使用的特定数据库名称。如果代理说连接到 db XYZ,而你连接到 myCoolDb,则连接将失败。只是想提一下。您的里程可能会有所不同。