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 バイトになるように見えます - 手動再起動ではなく、サーバーが決定したときに再起動をトリガーする