【问题标题】:Testing Postgre Database on Heroku在 Heroku 上测试 Postgres 数据库
【发布时间】:2018-11-21 18:41:52
【问题描述】:

我目前正在 Heroku 上使用 Swagger 构建 API,我想尝试端点是否在 Postgre 数据库中创建正确的条目。但是,一旦我尝试在我的测试环境中连接到 Heroku 的 Postgre,连接就会被拒绝。我认为这是因为在持续集成环境中,heroku 创建了一个沙箱并且不接受与真实数据库的连接。

我尝试按照此处的建议创建备份数据库:https://devcenter.heroku.com/articles/heroku-postgres-backups 但我找不到要访问的信息!

感谢任何帮助!

谢谢。

这是我的代码测试:

'use strict';

var should = require('should');
var request = require('supertest');
var assert = require('assert');
var server = require('../../../app');

var pg = require('pg');
var knex = require('knex')({
  client: 'postgresql',
  connection: process.env.DATABASE_URL

});

describe('controllers', function () {
  describe('testing cenas', function () {
     it('test1', function (done) {

      request(server)
        .get('/hello')
        .set('Accept', 'application/json')
        .expect('Content-Type', /json/)
        .expect(200)
        .end(function (err, res) {

          assert.equal(res.body, 'Hello,Hugo Pereira!');
          done();
        });
    });


  });
});

它给出了一个错误:

Unhandled rejection Error: Unable to acquire a connection
    at Client_PG.acquireConnection (/app/node_modules/knex/lib/client.js:332:40)
    at Runner.ensureConnection (/app/node_modules/knex/lib/runner.js:233:24)
    at Runner.run (/app/node_modules/knex/lib/runner.js:47:42)
    at Builder.Target.then (/app/node_modules/knex/lib/interface.js:39:43)
    at testPg (/app/api/controllers/hello_world.js:27:44)
    at swaggerRouter (/app/node_modules/swagger-tools/middleware/swagger-router.js:407:20)
    at swagger_router (/app/node_modules/swagger-node-runner/fittings/swagger_router.js:31:5)
    at Runner.<anonymous> (/app/node_modules/bagpipes/lib/bagpipes.js:171:7)
    at bound (domain.js:301:14)
    at Runner.runBound (domain.js:314:12)
    at Runner.pipeline (/app/node_modules/pipeworks/pipeworks.js:72:17)
    at Runner.flow (/app/node_modules/pipeworks/pipeworks.js:223:19)
    at Pipeworks.flow (/app/node_modules/pipeworks/pipeworks.js:135:17)
    at Pipeworks.siphon (/app/node_modules/pipeworks/pipeworks.js:186:19)
    at Runner.<anonymous> (/app/node_modules/bagpipes/lib/bagpipes.js:98:22)
    at bound (domain.js:301:14)
  0 passing (2s)

【问题讨论】:

  • 原来是我的错误,你需要在测试环境中定义你的 process.env.DATABASE_URL

标签: javascript node.js postgresql heroku mocha.js


【解决方案1】:

我设法使用 heroku in-dyno 数据库 (https://devcenter.heroku.com/articles/heroku-ci-in-dyno-databases) 解决了这个问题。获得数据库后,我会转到我自己制作的开发环境中的一个端点,它为我提供了一个真实数据库模式的转储文件。在测试环境中,我导入了这个文件,瞧,我拥有了测试环境所需的所有模式和表。

【讨论】:

    【解决方案2】:

    如果您使用的是 heroku postgres url,那么您需要进行外部访问的一件事是查询字符串 ?ssl=true 附加到 url

    例如

    "DATABASE_URL" : "postgres://user:pass@ec2-54-235-206-118.compute-1.amazonaws.com:5432/dbid?ssl=true"
    

    【讨论】:

      【解决方案3】:

      heroku pg:psql 命令应该连接到您的数据库。您还可以传递参数以连接到备用/备份数据库。

      【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2013-07-31
      • 2013-08-17
      • 2014-05-13
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多