0

「dynamodb_helper.js」があり、local-dynamoを使用して DynamoDB をローカルでエミュレートします。テストの前にサーバーを起動して正常に実行できましたが、stopDB() が機能していないようです。どんな助け/提案も大歓迎です。したがって、サーバーの子プロセスは、テストが終了した後も引き続き実行されます。

以下の私のコードを見つけてください。

    var AWS = require("aws-sdk");
var localDynamo = require('local-dynamo');
var dynamoServer = null;
var dynamodb = null;
var dynamo = null;

module.exports = {
  startDB: function() {
    dynamoServer = localDynamo.launch({
     port: 4567,
     detached: true,
     heap: '512m',
     stdio: 'pipe'
    })
    var awsConfig = require('../lib/util').ymlParser('aws');
    AWS.config.update(awsConfig);
    AWS.config.update({
     accessKeyId: "TestData",
     secretAccessKey: "TestData",
     region: "localhost",
     endpoint: "http://localhost:4567"
    });
    dynamodb = new AWS.DynamoDB();
    dynamo = dynamodb.DocumentClient;
  },

  stopDB: function() {
    setTimeout(function () {
        dynamoServer.kill();
      }, 1000)
  },

  createTable: function() {
    var params = {
        TableName : "Movies",
        KeySchema: [
            { AttributeName: "year", KeyType: "HASH"},  //Partition key
            { AttributeName: "title", KeyType: "RANGE" }  //Sort key
        ],
        AttributeDefinitions: [
            { AttributeName: "year", AttributeType: "N" },
            { AttributeName: "title", AttributeType: "S" }
        ],
        ProvisionedThroughput: {
            ReadCapacityUnits: 10,
            WriteCapacityUnits: 10
        }
    };
    dynamodb.createTable(params, function(err, data) {
        if (err) {
            console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2));
        } else {
            console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2));
        }
    });
  }
};
4

1 に答える 1

1

上部に追加:-

var treeKill = require('tree-kill');

以下のように stopDB を変更します。

stopDB : function() {
    console.log("Stop the dynamodb");
    console.log("Dynamodb pid number :" + dynamoServer.pid);        

    treeKill(dynamoServer.pid, 'SIGTERM', function(err) {
        if (err === null) {
            console.log("Dynamodb process has been killed");    
        } else {
            console.log("Dynamodb process hasn't been killed : " + JSON.stringify(err));
        }

    });
},

「kill」メソッドは実際にはプロセスを強制終了しないため、treeKill を使用してプロセスを強制終了します。

この関数は kill と呼ばれますが、子プロセスに送信されたシグナルは実際にはプロセスを終了しない場合があることに注意してください。

子プロセス キル リファレンス ドキュメント

于 2016-08-10T12:02:15.493 に答える