Phusion 乘客:'Initialize language runtime' 和 'Load or execute application' nodejs 应用程序错误

Phusion Passenger: 'Initialize language runtime' and 'Load or execute application' error with nodejs app

我的 nodejs 应用程序在开发环境中的本地机器上运行良好,但是让它在生产服务器上运行是一场噩梦。

简而言之,应用程序正在启动,但网站上未加载内容。如屏幕截图所示,它未能完全初始化。

Screenshot

有人对此有任何想法吗?甚至托管公司也不确定是什么原因造成的,到目前为止我在 google 上找不到任何相关信息。我只知道它来自 Phusion Passenger...

我会post我的解决方案,以防其他人运行遇到这个问题。

如果您使用 express 创建了一个 nodejs 应用程序并使用 express 生成器设置了该应用程序,您会注意到启动文件在项目目录的 bin 文件夹中名为 www。通常命名为app.js.

Phusion Passenger 寻找 app.js 来启动应用程序。您需要告诉 Phusion Passenger 在您的配置文件中查找 ./bin/www。对于不同的系统,它可能会有所不同。在 apache 中,它位于此处:

/etc/apache2/conf.d/userdata/std/2_4/YOUR_USERNAME/YOUR_DOMAIN/YOUR_APPNAME.conf

您需要添加此启动文件行:

PassengerStartupFile ./bin/www

您的配置文件应如下所示:

<Location "/">
    <IfModule mod_passenger.c>
        PassengerAppEnv "development"
        PassengerEnabled on
        PassengerBaseURI "/"
        PassengerAppRoot "/home/YOUR_USERNAME/YOUR_DOMAIN"
        PassengerAppGroupName "YOUR_APP_NAME"
        PassengerRuby /opt/cpanel/ea-ruby27/root/usr/libexec/passenger-ruby27
        PassengerPython /usr/bin/python
        PassengerNodejs /opt/cpanel/ea-nodejs10/bin/node
        PassengerAppType node

        PassengerStartupFile ./bin/www
        
    </IfModule>
</Location>

然后您只需要保存文件,重建 apache http 配置文件并重新启动 apache。

我使用 WHM 内的终端 运行 这两行:

1#/usr/local/cpanel/scripts/rebuildhttpdconf

2#/usr/local/cpanel/scripts/restartsrv_httpd

此 post 中的说明可在此处找到:

https://docs.cpanel.net/knowledge-base/web-services/how-to-install-a-node.js-application/