使用环境变量配置sails app以连接到Heroku Postgres

时间:2017-04-23 10:31:27

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

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

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

in 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实例中手动设置“Config Vars”,我可以使用与本地实例中的环境变量相同。我的意思是我可以转到数据库资源的heroku客户端页面,将其凭据(主机,数据库,用户和密码)单独复制到heroku应用程序的配置变量中。

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

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

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

应在凭据更改时自动更新。 我的问题是我不知道如何配置sails.js连接来使用这个url,代替单独的“host”,“user”,“password”和“database”键/值对。连接配置。

我尝试使用省略单个密钥的配置,只使用“host”,如下所示:

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连接,它将自动使用最新的凭据? (我使用风帆v0.12.3)

2 个答案:

答案 0 :(得分:3)

我没有使用PostgreSQL,但您可以尝试/改编它:

&#13;
&#13;
// 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'
}
&#13;
&#13;
&#13;

答案 1 :(得分:0)

以下可能是正确的方法:

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

在config / env / production.js中