Plesk 上的节点应用程序 - 自定义脚本上的环境变量

Node app on Plesk - Environment variables on custom scripts

我正在 运行在 Plesk Obsidian v18.0.29 上安装 Node v12 应用程序

我已经在专用部分设置了所需的环境变量:

此外,“应用程序模式”在理论上应该充当进程的 NODE_ENV,而且似乎确实如此。 仅供参考,我也尝试将它添加到“自定义环境变量”,但这并没有解决我的问题。

问题在于,尽管应用程序本身 运行 正常,但当我尝试 运行 自定义脚本(数据库迁移)时,Plesk 似乎忽略了这些变量,正如您从使用环境“开发”。

> REDACTED@0.1.0 migrate /var/www/vhosts/REDACTED/httpdocs
> sequelize db:migrate


[4mSequelize CLI [Node: 12.4.0, CLI: 5.4.0, ORM: 5.8.7][24m

Loaded configuration file "config/database.js".
Using environment "development".


[31mERROR:[39m Error parsing url: undefined
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! REDACTED@0.1.0 migrate: `sequelize db:migrate`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the REDACTED@0.1.0 migrate script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /var/www/vhosts/REDACTED/.npm/_logs/2020-09-04T08_13_39_221Z-debug.log

如果我尝试创建强制使用 NODE_ENV 变量的自定义脚本,则会考虑正确的环境,但仍会忽略其他变量。 例如,通过创建名为 migrateprod 的脚本并通过 Plesk 运行 对其进行设置:

"scripts": {
  "test": "npm run test:unit && npm run test:e2e",
  "test:unit": "mocha tests/unit/**/**.spec.js --require ./tests/setup.js --exit",
  "test:e2e": "mocha tests/e2e/**/**.spec.js --require ./tests/setup.js --exit",
  "start": "node index.js",
  "watch": "nodemon index.js",
  "migrate": "sequelize db:migrate",
  "migrateprod": "NODE_ENV=production sequelize db:migrate",
  "migrate:down": "sequelize db:migrate:undo:all",
  "cli": "node cli/index.js"
},

我现在可以看到环境生产,但未找到 DATABASE_URL 变量,而是出现错误:

> REDACTED@0.1.0 migrateprod /var/www/vhosts/REDACTED/httpdocs
> NODE_ENV=production sequelize db:migrate

[4mSequelize CLI [Node: 12.4.0, CLI: 5.4.0, ORM: 5.8.7][24m

Loaded configuration file "config/database.js".
Using environment "production".


[31mERROR:[39m Error parsing url: undefined
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! REDACTED@0.1.0 migrateprod: `NODE_ENV=production sequelize db:migrate`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the REDACTED@0.1.0 migrateprod script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /var/www/vhosts/REDACTED/.npm/_logs/2020-09-04T08_21_51_188Z-debug.log

底线是,Plesk 似乎忽略或避免在 运行ning 自定义脚本时设置环境变量。我试着四处搜索,但找不到任何类似的案例,这让我觉得我只是遗漏了一些东西。

有什么想法吗?提前感谢您的宝贵时间!

事实证明,无论您如何努力,Plesk 都不会将环境变量转发到自定义脚本。所以我修改了 package.json 以在 运行 脚本之前即时设置变量。

"scripts": {
  ... other scripts ...
  "cli": "export $(cat ../.env.production | xargs) && node cli/index.js"
},

在应用程序文件系统外的受保护文件夹中有一个 .env 文件,我从中获取变量并将它们作为参数发送到自定义脚本。

不是最优雅的解决方案,但它解决了问题。