我正在将我的一个宠物项目从 Rust 重写为 Erlang。该项目使用了一个 SQLite 数据库,并且说数据库已经变得非常强大,所以我编写了新的应用程序来使用相同的 SQLite 数据库文件,以便于迁移。
我正在使用 processone/erlang-sqlite3 驱动程序,因为它看起来是最成熟的。
我对该应用程序的初始模型在我的笔记本电脑上运行良好。我可以毫无问题地读取和写入数据库。问题是,当我将我的工作目录和数据库文件复制到我的 VPS 上时,即使在 sqlite3 CLI 客户端中运行相同的查询返回正确的数据,每个“select * from...”都返回一个空数组,并且完全相同的命令流在我的笔记本电脑上运行良好。
我相信由于某种原因,Erlang 进程无法从我服务器上的数据库文件中读取(我有一个“如果不存在则创建表”语句,它可以解释空数据但正确的架构)。但是,filelib:is_file/1 当我给它文件名时返回 true。
编辑:实际上,这可能不是这样 — 当我删除运行 create table if not exists
的代码时,我得到了完全相同的行为:sqlite3:read_all/2
返回列中的预期架构,但不返回行中的任何数据。
考虑到其他一切都一样,我想这可能是权限问题,但两个数据库文件都设置为模式 0644,所以我不确定这会如何影响事情。
这里还有什么我遗漏的吗?任何可能导致 Erlang 进程能够看到文件但不能从中读取文件的服务器配置内容?我在本地设置和 VPS 设置之间可以看到的唯一明显区别是 VPS 没有非 root 用户——sqlite3 或 Erlang 以 root 身份玩得不好吗?
任何想法或帮助将不胜感激!