[英]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 似乎在運行自定義腳本時忽略或避免設置環境變量。 我試着四處尋找,但找不到任何類似的案例,這讓我覺得我只是錯過了一些東西。
有任何想法嗎? 在此先感謝您的時間!
事實證明,無論您多么努力,Plesk 都不會將環境變量轉發到自定義腳本。 所以我修改了package.json
以在運行腳本之前即時設置變量。
"scripts": {
... other scripts ...
"cli": "export $(cat ../.env.production | xargs) && node cli/index.js"
},
在應用程序文件系統外的受保護文件夾中有一個 .env 文件,我從中獲取變量並將它們作為參數發送到自定義腳本。
不是最優雅的解決方案,但它解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.