Node Cluster模块,与Passenger不兼容
Node Cluster module, which is incompatible with Passenger
我正在使用 node.js express passport 和最近的 rate-limiter-flexible ... 我注意到我收到了这条错误消息:
server.js
const { RateLimiterMemory, RateLimiterRes } = require('rate-limiter-flexible');
控制台错误:
[ N 2019-12-19 17:30:36.7775 15266/Ta age/Cor/CoreMain.cpp:1358 ]: Checking whether to disconnect long-running connections for process 20096, application /var/www/host/project (production)
App 16152 output: Trace: You required the Node Cluster module, which is incompatible with Passenger, a non-functional shim was returned and your app may still work. However, please remove the related code as soon as possible.
App 16152 output: at Module.require (/usr/share/passenger/helper-scripts/node-loader.js:63:12)
App 16152 output: at require (internal/modules/cjs/helpers.js:16:16)
App 16152 output: at Object.<anonymous> (/var/www/host/project/node_modules/rate-limiter-flexible/lib/RateLimiterCluster.js:22:17)
App 16152 output: at Module._compile (internal/modules/cjs/loader.js:774:30)
App 16152 output: at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
App 16152 output: at Module.load (internal/modules/cjs/loader.js:641:32)
App 16152 output: at Function.Module._load (internal/modules/cjs/loader.js:556:12)
App 16152 output: at Module.require (internal/modules/cjs/loader.js:681:19)
App 16152 output: at Module.require (/usr/share/passenger/helper-scripts/node-loader.js:80:25)
App 16152 output: at require (internal/modules/cjs/helpers.js:16:16)
这是什么,我该如何解决?
我认为,它与 index.js
有关,其中所有 class 都是导入的,包括 RateLimiterCluster
。如果你不使用它,你可以尝试通过完整路径
来要求你需要的确切 class
const RateLimiterRedis = require('rate-limiter-flexible/lib/RateLimiterRedis');
我 运行 在尝试将我的 NodeJS 应用程序(使用集群模块)部署到具有 cPanel 和“设置 Node.js 应用程序”选项的共享主机后出现相同的错误消息。
我建议您阅读的 Passenger 文档中解释了不兼容问题:Fundamental Concepts Phusion Passenger
特别是这部分解释了集群模块与 Passenger 不兼容的原因:
Passenger 替换了 Cluster 模块。不需要样板代码:Passenger 可以在多个进程中启动您的应用程序并自动负载平衡流量,大部分时间无需更改代码,除了删除集群模块样板文件(如果您已经添加了它)。
除此之外,Passenger 提供的最大优势是它可以通过使用粘性会话来负载平衡 WebSockets、Socket.IO 和 SockJS。这些技术在 Cluster 模块上效果不佳,因为 Cluster 模块的负载均衡机制是通用的(因此无法实现粘性会话),而 Passenger 的机制是专门为 HTTP 编写的。
如果您正在使用 Passenger,我们希望您这样做,那么您不能在您的项目中包含 Cluster 模块,因为它与 Passenger
冲突
我正在使用 node.js express passport 和最近的 rate-limiter-flexible ... 我注意到我收到了这条错误消息:
server.js
const { RateLimiterMemory, RateLimiterRes } = require('rate-limiter-flexible');
控制台错误:
[ N 2019-12-19 17:30:36.7775 15266/Ta age/Cor/CoreMain.cpp:1358 ]: Checking whether to disconnect long-running connections for process 20096, application /var/www/host/project (production)
App 16152 output: Trace: You required the Node Cluster module, which is incompatible with Passenger, a non-functional shim was returned and your app may still work. However, please remove the related code as soon as possible.
App 16152 output: at Module.require (/usr/share/passenger/helper-scripts/node-loader.js:63:12)
App 16152 output: at require (internal/modules/cjs/helpers.js:16:16)
App 16152 output: at Object.<anonymous> (/var/www/host/project/node_modules/rate-limiter-flexible/lib/RateLimiterCluster.js:22:17)
App 16152 output: at Module._compile (internal/modules/cjs/loader.js:774:30)
App 16152 output: at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
App 16152 output: at Module.load (internal/modules/cjs/loader.js:641:32)
App 16152 output: at Function.Module._load (internal/modules/cjs/loader.js:556:12)
App 16152 output: at Module.require (internal/modules/cjs/loader.js:681:19)
App 16152 output: at Module.require (/usr/share/passenger/helper-scripts/node-loader.js:80:25)
App 16152 output: at require (internal/modules/cjs/helpers.js:16:16)
这是什么,我该如何解决?
我认为,它与 index.js
有关,其中所有 class 都是导入的,包括 RateLimiterCluster
。如果你不使用它,你可以尝试通过完整路径
const RateLimiterRedis = require('rate-limiter-flexible/lib/RateLimiterRedis');
我 运行 在尝试将我的 NodeJS 应用程序(使用集群模块)部署到具有 cPanel 和“设置 Node.js 应用程序”选项的共享主机后出现相同的错误消息。
我建议您阅读的 Passenger 文档中解释了不兼容问题:Fundamental Concepts Phusion Passenger
特别是这部分解释了集群模块与 Passenger 不兼容的原因:
Passenger 替换了 Cluster 模块。不需要样板代码:Passenger 可以在多个进程中启动您的应用程序并自动负载平衡流量,大部分时间无需更改代码,除了删除集群模块样板文件(如果您已经添加了它)。 除此之外,Passenger 提供的最大优势是它可以通过使用粘性会话来负载平衡 WebSockets、Socket.IO 和 SockJS。这些技术在 Cluster 模块上效果不佳,因为 Cluster 模块的负载均衡机制是通用的(因此无法实现粘性会话),而 Passenger 的机制是专门为 HTTP 编写的。 如果您正在使用 Passenger,我们希望您这样做,那么您不能在您的项目中包含 Cluster 模块,因为它与 Passenger
冲突