如何从 Electron AppImage .mount 点访问 Sqlite3 数据库?

Posted

技术标签:

【中文标题】如何从 Electron AppImage .mount 点访问 Sqlite3 数据库?【英文标题】:How do I access a Sqlite3 database from an Electron AppImage .mount point? 【发布时间】:2021-07-12 06:57:33 【问题描述】: 操作系统:Linux 5.9.16-1-MANJARO 电子版本:10.1.5 BetterSqlite 版本:7.1.2

我目前正在使用 Electron 和 BetterSqlite 编写应用程序。

我这样构建 AppImage:

npm run build && electron-builder build

这是我从代码中访问数据库的方式:

db = new Database(
    path.join(__dirname, `/$dbName`).replace("/app.asar", "")
);

我已添加要使用的数据库文件:

"extraResources": [
    "public/build/Database.db"
],

但是当我打开 AppImage 时,我收到以下错误消息:

SqliteError: attempt to write a readonly database

由于 /tmp/.mountxxx 点为只读,数据库似乎无法访问。

当我在开发文件夹中打开应用程序时,不会发生此行为,因为它不是只读目录。

有没有办法使用/tmp/.mountxxx目录下的数据库?

我将如何以另一种方式访问​​数据库?

提前谢谢你。

【问题讨论】:

【参考方案1】:

我已经搜索了一种使用 AppImage 挂载点进行读写的方法,但我没有找到任何东西。我将使用用户的主目录来存储数据库

【讨论】:

【参考方案2】:

正如错误所说,当执行 AppImage 时,AppDir 被挂载为 RO 文件系统。

要解决此问题,您需要使用启动脚本将数据库文件复制到用户主目录中。例如,您可以将其复制到“$HOME/.cache/com.myapp/appdata.db”,然后使用这个新副本。

【讨论】:

以上是关于如何从 Electron AppImage .mount 点访问 Sqlite3 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Electron Builder 构建 appImage 时出现“不允许符号链接操作”错误

从 Electron 中所需的 JS 模块访问父变量

电子构建失败并出现 ERR_ELECTRON_BUILDER_CANNOT_EXECUTE

在 appimage 中使用 unionfs

如何使用appimage部署qt5应用

安装.AppImage