0

Windows Server 2008 R2 エンタープライズ

ノード バージョン 12.13.1

node-windows バージョン 1.0.0-beta.5

コードで require('dotenv') を使用して環境変数を (デフォルトの .env ファイルなどから) ロードする代わりに、ノード アプリケーションを呼び出すときに、特定の環境ファイルへのパスを渡す必要があります。この環境ファイルは、アプリケーションが開始される顧客によって異なります (たとえば、異なるデータベース、パス、顧客コードなど)。

cli では、次の方法で正常に実行できます。

node --require dotenv/config bin/www dotenv_config_path=C:\projects\abc\env\XYZ.env

ご覧のとおり、env ファイルの場所に絶対パスを使用していますが、相対パスでも機能します。ノードウィンドウでこれを機能させることができない理由として、これを排除しようとしています。

node-windows を使用して、ノード アプリケーションを呼び出し、上記のコードのように特定の env ファイルをロードする Windows サービス ラッパーを作成しようとしています。Windowsサービスを作成した後、しばらくすると終了します。これは、機能するために必要な環境変数が不足していることを示しています。つまり、環境ファイルを読み込めません。

node-windows を使用して Windows サービスを作成するスクリプトは次のとおりです。

#!/usr/bin/env node

// Usage:
// npm run install-win XYZ

// Notes:
// 1. Before creating the windows service, make sure to delete any previous files in the /bin folder (i.e. all files abcXYZ.*)
// 2. After creating the windows service, change the Log On account to the ******* user to avoid persmission issues when using paths on other production servers

const args = process.argv;
const codeclient = args[2];

const serviceName = `abc${codeclient}`;
const environmentPath = `C:\\projects\\abc\\abc-api\\env\\${codeclient}.env`; // Make sure to use the full absolute path here

const Service = require('node-windows').Service;

// Create a new service object
const svc = new Service({
    name: serviceName,
    description: serviceName,
    script: require('path').join(__dirname, 'www'),
    scriptOptions: `dotenv_config_path=${environmentPath}`,
    nodeOptions: [
        '--require=dotenv/config',
        '--harmony',
        '--max_old_space_size=4096'
    ]/*,
    env: {
        name: 'DOTENV_CONFIG_PATH',
        value: environmentPath
    }*/
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install', function(){
    svc.start();
});

svc.install();

さまざまな構成で「scriptOptions」アプローチと「env」アプローチの両方を試しましたが、何も機能しません。

誰かが以前にこのようなものを作ることができたなら、どうやってそれをやったのか知りたい.

4

1 に答える 1