没有端口分配给Strongloop应用程序

时间:2015-12-23 21:21:15

标签: loopbackjs strongloop

我正在尝试将strongloop应用程序部署到运行Strongloop Process Manager的Digitalocean远程控制台。我已经成功运行deploy命令,如下所示:

slc ctl -C http://IPADDRESS:8701


    Service ID: 1
    Service Name: placesAPI
    Environment variables:
    No environment variables defined

    Instances:
        Version  Agent version  Debugger version  Cluster size  Driver metadata
         5.1.0       2.0.2             n/a              1             N/A
    Processes:
           ID      PID  WID  Listening Ports  Tracking objects?  CPU profiling?  Tracing?  Debugging?
        1.1.1050  1050   0
        1.1.2065  2065   49

接下来,我通过运行以下命令检查我的Strongloop应用程序的状态:

$ slc ctl -C http://prod.foo.com:7777

Service ID: 1
Service Name: appone
Environment variables:
No environment variables defined

Instances:
    Version  Agent version  Cluster size
     4.0.30      1.4.15           4
Processes:
        ID      PID   WID  Listening Ports  Tracking objects?  CPU profiling?
    1.1.22555  22555   0
    1.1.22741  22741   5     prod.foo.com:3001
    1.1.22748  22748   6     prod.foo.com:3001
    1.1.22773  22773   7     prod.foo.com:3001
    1.1.22793  22793   8     prod.foo.com:3001

此时,我无法通过访问IPADDRESS:3001来访问我的应用程序,因为Strongloop文档会建议并且根据Strongloop文档,在端口3001上运行的上述应用程序状态中没有列出任何进程。

将我的应用状态与Strongloop文档中显示的此部署状态下的应用状态进行比较,看来我应该有一些进程正在侦听端口3001,这些进程未在我的应用中运行。

以下是Strongloop文档中显示的应用状态:

{
  "name": "placesAPI",
  "version": "1.0.0",
  "main": "server/server.js",
  "scripts": {
    "start": "node .",
    "pretest": "jshint ."
  },
  "dependencies": {
    "body-parser": "^1.9.0",
    "compression": "^1.0.3",
    "connect-ensure-login": "^0.1.1",
    "cookie-parser": "^1.3.2",
    "cors": "^2.5.2",
    "errorhandler": "^1.1.1",
    "express-flash": "0.0.2",
    "express-session": "^1.7.6",
    "jade": "^1.7.0",
    "loopback": "^2.22.0",
    "loopback-boot": "^2.6.5",
    "loopback-component-explorer": "^2.1.0",
    "loopback-component-passport": "^1.5.0",
    "loopback-connector-postgresql": "^2.4.0",
    "loopback-datasource-juggler": "^2.39.0",
    "passport": "^0.3.2",
    "passport-facebook": "^1.0.3",
    "passport-google-oauth": "^0.2.0",
    "passport-local": "^1.0.0",
    "passport-oauth2": "^1.1.2",
    "passport-twitter": "^1.0.3",
    "serve-favicon": "^2.0.1"
  },
  "devDependencies": {
    "jshint": "^2.5.6"
  },
  "repository": {
    "type": "",
    "url": ""
  },
  "description": "placesAPI",
  "bundleDependencies": [
    "body-parser",
    "compression",
    "connect-ensure-login",
    "cookie-parser",
    "cors",
    "errorhandler",
    "express-flash",
    "express-session",
    "jade",
    "loopback",
    "loopback-boot",
    "loopback-component-explorer",
    "loopback-component-passport",
    "loopback-connector-postgresql",
    "loopback-datasource-juggler",
    "passport",
    "passport-facebook",
    "passport-oauth2",
    "serve-favicon"
  ]
}

请注意侦听端口3001的其他进程。

我的问题是:如何让我的strongloop应用程序运行并收听这些端口?

如果有帮助,请查看我的package.json和config.json文件:

:::::::::::::::::::::::的package.json ::::::::::::::::

{
  "restApiRoot": "/api",
  "host": "0.0.0.0",
  "port": 3000,
  "cookieSecret": "REDACTED",
  "remoting": {
    "context": {
      "enableHttpContext": false
    },
    "rest": {
      "normalizeHttpPath": false,
      "xml": false
    },
    "json": {
      "strict": false,
      "limit": "100kb"
    },
    "urlencoded": {
      "extended": true,
      "limit": "100kb"
    },
    "cors": false,
    "errorHandler": {
      "disableStackTrace": false
    }
  },
  "legacyExplorer": false
}

::::::::::::::::::::::: config.json ::::::::::::::::

2015-12-23T22:13:35.876Z pid:2720 worker:84 events.js:142
2015-12-23T22:13:35.882Z pid:2720 worker:84       throw er; // Unhandled 'error' event
2015-12-23T22:13:35.882Z pid:2720 worker:84       ^
2015-12-23T22:13:35.882Z pid:2720 worker:84 Error: connect ECONNREFUSED 127.0.0.1:5432
2015-12-23T22:13:35.882Z pid:2720 worker:84     at Object.exports._errnoException (util.js:856:11)
2015-12-23T22:13:35.882Z pid:2720 worker:84     at exports._exceptionWithHostPort (util.js:879:20)
2015-12-23T22:13:35.883Z pid:2720 worker:84     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1064:14)
2015-12-23T22:13:35.919Z pid:1106 worker:0 ERROR supervisor worker id 84 (pid 2720) accidental exit with 1
2015-12-23T22:13:38.253Z pid:1106 worker:0 INFO supervisor started worker 85 (pid 2738)
2015-12-23T22:13:38.253Z pid:1106 worker:0 INFO supervisor resized to 1
2015-12-23T22:13:39.858Z pid:2738 worker:85 INFO strong-agent native addon missing, install a compiler
2015-12-23T22:13:39.859Z pid:2738 worker:85 INFO strong-agent v2.0.2 profiling app 'placesAPI' pid '2738'
2015-12-23T22:13:39.890Z pid:2738 worker:85 INFO strong-agent[2738] started profiling agent
2015-12-23T22:13:44.943Z pid:2738 worker:85 INFO strong-agent not profiling, agent metrics requires a valid license.
2015-12-23T22:13:44.944Z pid:2738 worker:85 Please contact sales@strongloop.com for assistance.
2015-12-23T22:13:44.992Z pid:2738 worker:85 Web server listening at: http://0.0.0.0:3001
2015-12-23T22:13:44.997Z pid:2738 worker:85 Browse your REST API at http://0.0.0.0:3001/explorer
2015-12-23T22:13:45.103Z pid:2738 worker:85 Connection fails:  { [Error: connect ECONNREFUSED 127.0.0.1:5432]
2015-12-23T22:13:45.104Z pid:2738 worker:85   code: 'ECONNREFUSED',
2015-12-23T22:13:45.104Z pid:2738 worker:85   errno: 'ECONNREFUSED',
2015-12-23T22:13:45.104Z pid:2738 worker:85   syscall: 'connect',
2015-12-23T22:13:45.104Z pid:2738 worker:85   address: '127.0.0.1',
2015-12-23T22:13:45.104Z pid:2738 worker:85   port: 5432 }
2015-12-23T22:13:45.104Z pid:2738 worker:85 It will be retried for the next request.

来自log-dump的日志中也存在此错误:

// Capture screen
                        Robot clientrobot = new Robot();
                        Rectangle robotrectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
                        BufferedImage image = clientrobot.createScreenCapture(robotrectangle);

                        String imageStringByte = null;  
                        ByteArrayOutputStream bos = new ByteArrayOutputStream();

                        ImageIO.write(image, "jpg", bos);  
                        byte[] imageBytes = bos.toByteArray();  

                        imageStringByte = Base64.getMimeEncoder().encodeToString(imageBytes);  

                        bos.close();

                        output.writeObject("RECEIVEDESKTOP-" + imageStringByte);
                        output.flush();

1 个答案:

答案 0 :(得分:1)

只是回答一下,从var dataItem = e.Item.DataItem as WhateverTheUnderlyingTypeIs; 我们可以看到您已经包含了package.json,在日志中我们看到尝试连接到端口 5432 这是该DBMS的默认值。它试图连接localhost(loopback-connector-postgresql),我的猜测是Postgres没有安装在你的数字海洋盒子上,或者没有运行。您需要更新数据库的配置,或者在DO droplet上安装(并运行)数据库。

如果您对开发与生产有不同的配置,那么您可以设置environment-specific datasources config file127.0.0.1。在该文件中,您将放置您的prod配置,并在datasources.production.json中您将拥有您的dev(本地)配置。使用此方法时,请务必将DO droplet上的datasources.json变量设置为NODE_ENV(以匹配prod数据源配置文件的名称)。