我有一个永远在生产服务器上运行的NodeJS应用程序。
该应用程序使用第三方SQLite数据库,该数据库每天早上使用由cron触发的脚本进行更新,cron将数据库从外部FTP下载到服务器。
我花了一些时间才意识到每次文件被报送时都需要重新启动服务器,否则我的应用程序使用的数据不会发生变化(我想它在启动时缓存在内存中(。
// 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
命令行 shell:
sqlite3 $DIRECTORY/real.db ".restore $DOWNLOADDIRECTORY/temp.db"
(如果应用程序手动缓存数据,您仍然必须告诉它重新加载它。