1

我已经在 Heroku 上部署了我的 express-gateway,在gateway.config.yml文件中以这种方式使用 env 变量:

http:
  port: ${PORT:-8080}
  host: ${HOST:-localhost} 
https:
  port: ${PORT:-8080}
  host: ${HOST:-localhost}   
apiEndpoints:
  ....

无论如何 Heroku 不断给出这个错误:

[EG:gateway] gateway http server listening on :::8080

State changed from starting to crashed
    
Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

${ENV_VAR_NAME:-DEFAULT}根据官方文档使用了该符号。为什么 Heroku 尝试绑定 8080?

====== 更新

对于谁将使用 Heroku,这只是一个无关紧要的提示,这是我从 env vars获取redis url 的方法。

      var redis_Url = process.env.REDIS_URL;
      var groups = /^redis:\/\/(.*?)\:(.+?)\@(.+?)\:(.+)$/gi.exec(redis_Url); 
      
      var nm = groups[1];
      var pasw = groups[2];
      var host = groups[3];
      var port = groups[4];
    
      process.env.REDIS_NM   = nm;
      process.env.REDIS_PASW = pasw;
      process.env.REDIS_HOST = host;
      process.env.REDIS_PORT = port;
      
      console.log('redis url   --> '+process.env.REDIS_URL);
      console.log('nm   --> '+process.env.REDIS_NM);
      console.log('pasw --> '+process.env.REDIS_PASW);
      console.log('host --> '+process.env.REDIS_HOST);
      console.log('port --> '+process.env.REDIS_PORT);

4

1 回答 1

2

你不应该在同一个端口上同时监听 http 和 https 服务器,否则它会失败。

Heroku 提供了自己的路由器为您处理 SSL 终止,因此您可以删除整个https部分。

于 2020-01-30T13:22:39.400 回答