0

writeFileSync を呼び出すと、ランダムに 0 バイトのファイルが生成されます。

目的は、json をファイルに書き込み、json が変更されるたびに書き直すことです。また、起動時にjsonをロードします。しかし、ファイルの長さが 0 バイトになり続け、ほとんどの場合は機能し、数日後には 0 バイトになります。

コード: LiveScript https://github.com/audreyt/ethercalc/blob/master/src/db.ls または JavaScript に変換https://github.com/audreyt/ethercalc/blob/master/db.js

   try
      db.DB = JSON.parse do
        require \fs .readFileSync "#dataDir/dump.json" \utf8
      console.log "==> Restored previous session from JSON file"
      db.DB = {} if db.DB is true
    Commands =
      bgsave: (cb) ->
        fs.writeFileSync do
          "#dataDir/dump.json"
          JSON.stringify db.DB,,2
          \utf8
        cb?!

ロギングなど:

if fs.existsSync "#dataDir/dump.json" #check file exists - throws exception if exists and read fails
  #console.log "==> Found previous JSON file"
  try      
    db.DB = JSON.parse do
      require \fs .readFileSync "#dataDir/dump.json" \utf8
    console.log "==> Restored previous session from JSON file"
    db.DB = {} if db.DB is true
  catch 
    console.log "dump file locked, exit process"
    process.exit! 
else
  console.log "No existing dump file - #dataDir/dump.json "
Commands =
  bgsave: (cb) ->
    fs.writeFileSync do
      "#dataDir/dump.json"
      JSON.stringify db.DB,,2
      \utf8
    cb?!

デバッグまたは再構築する方法についての提案は大歓迎です。

注: - 回避策 - 24 時間ごとに自動再起動を追加すると、問題が修正されました。
- 0 バイトになると、コードは "dump file locked, exit process" を出力します - コードは openshift サーバーで実行されています - サーバーが自動再起動されると 0 バイトになるように見えます - 手動再起動ではなく、サーバーが決定したときに再起動をトリガーする

4

0 に答える 0