运行命令刷新数据库后,Sail.js需要服务器重启

时间:2014-01-01 16:18:28

标签: node.js sails.js

从这个问题Sails js using models outside web server我学会了如何从终端运行命令来更新记录。但是,当我这样做时,更改不会显示,直到我重新启动服务器。我正在使用sails-disk adapter和v0.9

2 个答案:

答案 0 :(得分:2)

随着时间的推移完成删除“过期记录”的一种方法是在/config/bootstrap.js中滚动自己的“类似cron的工作”。在psuedo代码中,它看起来像这样:

module.exports.bootstrap = function (cb) {

  setInterval(function() {  < Insert Model Delete Code here>  }, 300000);

  cb();
};

这种方法的缺点是,如果它抛出它会停止服务器。您也可以查看kue

答案 1 :(得分:2)

根据source code,当相应的Waterline集合is being created时,使用sails-disk适配器的应用程序仅从文件加载一次数据。之后,所有updatedestroy s都发生在内存中,然后数据被转储到文件中,但不会被重新读取。

也就是说,在您的情况下发生的情况是,一旦您的服务器运行,使用您的CLI实例更改数据库文件(.tmp/disk.db)无关紧要,“因为提升Sails服务器赢了”知道这些变化,直到它重新开始。

长话短说,解决方案很简单:使用另一个适配器。我建议您查看sails-mongosails-redis(虽然后者仍处于开发阶段),因为Mongo和Redis都有数据自动过期功能(http://docs.mongodb.org/manual/tutorial/expire-data/http://redis.io/commands/expire )。此外,sails-disk无论如何都不适合生产,所以迟早你需要别的东西。