更新SQLite数据库而不重新启动应用程序

时间:2018-01-26 19:57:45

标签: node.js sqlite cron forever node-sqlite3

我有一个 NodeJS 应用程序,它在永远的生产服务器上运行。

该应用程序使用第三方 SQLite 数据库,该数据库每天早上更新一个由cron触发的脚本,后者将数据库从外部FTP下载到服务器。

我花了一些时间才意识到每次文件被rapatriated时我​​都需要重新启动服务器,否则我的应用程序使用的数据没有变化(我猜它在启动时会在内存中缓存)。

// 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...

如何在不重新启动应用程序的情况下刷新数据库?

1 个答案:

答案 0 :(得分:1)

您不得覆盖可能与其建立开放连接的数据库文件(请参阅How To Corrupt An SQLite Database File)。

覆盖数据库的正确方法是下载到临时文件,然后使用备份API将其复制到实际数据库,从而处理正确的事务行为。最简单的方法是使用setContentView(R.layout.activity_splash_screen);命令行shell:

sqlite3

(如果您的应用程序手动缓存数据,您仍然必须告诉它重新加载它。)