2016-08-10 24 views
0

私は "dynamodb_helper.js"を持っており、local-dynamoを使ってDynamoDBをローカルでエミュレートしています。 テストの前にサーバーを起動して正常に実行できましたが、stopDB()は機能していないようです。どんな助けや提案も大変ありがとうございます。したがって、サーバーの子プロセスは、テストが終了しても実行を継続します。DynamoDBLocal:DBの起動と停止はどうすればできますか?

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

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)); 
     } 
    }); 
    } 
}; 

答えて

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)); 
     } 

    }); 
}, 

使用treeKillプロセスを実際に殺すわけではありません。

機能を殺すと呼ばれながら、子プロセス に供給された信号は、実際のプロセスを終了しない場合があります。

Child Process Kill Reference Document

+0

私はちょうど私の答えは、問題を解決するのに役立ったかどうかを疑問に思って?はいの場合は、回答を受け入れるよう依頼できますか? – notionquest

+0

こんにちは....これを手伝ってくれてありがとう。私はまだこれを試しています。チェックして確認します。 –

+0

HI ..所与の溶液が期待どおりに作用している。 - ダイナモプロセスが殺されます。ただ、「Dynamodbのプロセスは未定義ではありません。印刷しようとしました "エラー"とそれは未定義を示しています。 "else"ブロックが実行された理由はわかりませんが、それでも解決策はあります。ありがとう! –

関連する問題