実稼働サーバー上で永久に実行されるNodeJSアプリケーションがあります。
そのアプリケーションは、外部FTPからサーバーにデータベースをダウンロードするcronによってトリガーされるスクリプトで毎朝更新されるサードパーティのSQLiteデータベースを使用します。
ファイルがラパトリエートされるたびにサーバーを再起動する必要があることに気付くまでにしばらく時間がかかります。そうしないと、アプリケーションで使用されるデータに変更がありません(起動時にメモリにキャッシュされていると思います)。
// sync_db.sh
wget -l 0 ftp://$REMOTE_DB_PATH --ftp-user=$USER --ftp-password=$PASSWORD \
--directory-prefix=$DIRECTORY -nH
forever restart 0 // <- Here I hope something nicer...
アプリを再起動せずにデータベースを更新するにはどうすればよいですか?
接続が開いている可能性のあるデータベースファイルを上書きしないでください(SQLiteデータベースファイルを破損する方法を参照)。
データベースを上書きする正しい方法は、一時ファイルにダウンロードしてから、バックアップAPIを使用して実際のデータベースにコピーすることです。これにより、適切なトランザクション動作が処理されます。これを行う最も簡単な方法は、sqlite3
コマンドラインシェルを使用することです。
sqlite3 $DIRECTORY/real.db ".restore $DOWNLOADDIRECTORY/temp.db"
(アプリケーションが手動でデータをキャッシュする場合でも、データをリロードするように指示する必要があります。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加