【问题标题】:Configuring sails app for connection to Heroku Postgres using Environment Variables使用环境变量配置sails 应用程序以连接到Heroku Postgres
【发布时间】:2017-09-20 01:34:35
【问题描述】:

能否使用 URI 或将凭据(主机、用户、密码和数据库)合并到一个字符串中的 URL 来配置sails.js 数据库连接?还是需要在配置中将它们单独分配为自己的键值对?

在开发过程中,我已将sails.js 应用程序配置为使用环境变量作为数据库凭据,如下所示:

在connections.js中:

someSqlDatabase: {
    host: process.env.dbHost,
    user: process.env.dbUserName,
    password: process.env.dbPassword,
    database: process.env.db,
    port: 5432,
    ssl: true,
    adapter: 'sails-postgresql'

这个工作用于连接到我分配给我的项目的 heroku-postgresql 资源,我可以在我的 heroku 实例中手动设置“配置变量”,我可以使用它与我本地实例中的环境变量相同。我的意思是我可以转到数据库资源的 heroku 客户端页面,将其凭据(主机、数据库、用户和密码)分别复制到 heroku 应用程序的配置变量中。

问题在于 heroku 会定期更改凭据,并且我手动复制的配置变量将变得过时,并且在发生这种情况时需要重新粘贴。显然,这不是一个理想的解决方案。

Heroku 会自动为资源提供一个配置变量,称为 DATABASE_URL,如下所示:

"postgres://<user>:<password>@<host>:<port>/<database>"

当凭据更改时,它应该会自动更新。 我的问题是我不知道如何配置sails.js 连接来使用这个url,而不是单独的“主机”、“用户”、“密码”和“数据库”键/值对连接配置。

我尝试使用省略单个键并仅使用“主机”的配置,例如:

someSqlDatabase: {
   host: process.env.DATABASE_URL,
   ssl: true,
   adapter: 'sails-postgresql'
}

但是这个连接失败了。我见过这种称为 URI 的字符串,并尝试过长镜头配置:

someSqlDatabase: {
    uri: proccess.env.DATABASE_URL
    ssl: true,
    adapter: 'sails-postgresql'
}

但这也失败了。有没有办法配置与自动使用最新凭据的 heroku postgresql 数据库的sails-js 连接? (我使用的是sails v0.12.3)

【问题讨论】:

    标签: postgresql heroku configuration environment-variables sails.js


    【解决方案1】:

    以下可能是正确的方法:

    module.exports = {
      ...
      default: {
      ssl: true,
      url: process.env.HEROKU_POSTGRESQL_SILVER_URL,
      adapter: 'sails-postgresql'
      },
      ...
    }
    

    在 config/env/production.js 中

    【讨论】:

      【解决方案2】:

      我没有使用 PostgreSQL,但你可以尝试/调整这个:

      // before/outside module.exports
      var url = require('url').parse(process.env.DATABASE_URL);
      
      // within the config
      someSqlDatabase: {
          host: url.host, 
          user: url.auth.split(':')[0], 
          password: url.auth.split(':')[1], 
          database: url.pathname.substring(1),
          port: url.port, 
          ssl: true,
          adapter: 'sails-postgresql'
      }

      【讨论】:

      • 这太棒了!我不知道这个功能被嵌入到 node.js 中。我期待需要做一些花哨的正则表达式;这要简单得多!
      • 一个小的更正:url.host 包括端口号(看起来像'host:port'),所以你也需要拆分它。使用主机:url.host.split(':')[0],
      • 是的,很抱歉造成混乱。
      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 2018-12-04
      • 1970-01-01
      • 2016-01-24
      • 2019-09-16
      • 2021-06-01
      • 2021-12-23
      • 2017-02-28
      相关资源
      最近更新 更多