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

No Ports Assigned to Strongloop App

我正在尝试将 strongloop 应用程序部署到 Digitalocean 远程盒子 运行ning Strongloop Process Manager。我已经成功 运行 部署命令如下:

USER ~/projects/loopback/places-api $ slc deploy  http://IPADDRESS deploy

    Counting objects: 5215, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (4781/4781), done.
    Writing objects: 100% (5215/5215), 7.06 MiB | 4.27 MiB/s, done.
    Total 5215 (delta 1130), reused 0 (delta 0)
    To http://104.131.66.124:8701/api/services/1/deploy/default
     * [new branch]      deploy -> deploy
    Deployed `deploy` as `placesAPI` to `http://IPADDRESS:8701/`

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

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

此时,我无法通过访问 IPADDRESS:3001 来访问我的应用程序,正如 Strongloop 文档所建议的那样,并且在端口 3001 上的上述应用程序状态 运行ning 中没有列出任何进程正如 Strongloop 文档所预期的那样。

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

这是 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

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

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

如果有帮助,这里是我的 package.json 和 config.json 文件:

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

{
  "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"
  ]
}

::::::::::::::::::::::::config.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
}

log-dump 的日志中也有这个错误:

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.

只是为了把这个放在一个答案中,从 package.json 我们可以看到你已经包含了 loopback-connector-postgresql 并且在日志中我们看到尝试连接到端口 5432 这是该 DBMS 的默认值。它正在尝试在本地主机 (127.0.0.1) 上进行连接,我的猜测是 Postgres 要么没有安装在您的 Digital Ocean 机器上,要么没有 运行ning。您需要更新数据库的配置,或在您的 DO droplet 上安装(和 运行)数据库。

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