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 文件,我从中获取变量并将它们作为参数发送到自定义脚本。
不是最优雅的解决方案,但它解决了问题。
我正在 运行在 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 文件,我从中获取变量并将它们作为参数发送到自定义脚本。
不是最优雅的解决方案,但它解决了问题。