树莓派B3部署ASP.NET Core 2.0应用遇SQLite Error 14错误求助
解决树莓派ASP.NET Core 2.0中SQLite Error 14(无法打开数据库文件)的问题
嘿,这个问题我在树莓派部署ASP.NET Core应用时也踩过坑,SQLite Error 14基本都是路径错误、权限不足或者文件不存在导致的,给你几个具体的排查和解决步骤:
1. 核对数据库路径的正确性
- 树莓派是Linux系统,路径必须用正斜杠
/,绝对不能用Windows的反斜杠\,这是最容易犯的低级错误 - 别依赖相对路径!ASP.NET Core的工作目录可能和你预期的不一样(比如用systemd托管时),建议直接用绝对路径,比如
/home/pi/MyAspNetApp/Data/app.db - 可以在代码里临时输出实际路径验证,比如在
Program.cs里加一行:
启动应用后看控制台输出,确认路径是否指向正确的位置Console.WriteLine($"当前数据库路径: {Configuration.GetConnectionString("DefaultConnection")}");
2. 修复文件和目录的读写权限
SQLite不仅需要读写数据库文件,还需要对文件所在目录有读写权限(用来生成临时文件和日志),所以要确保运行应用的用户有足够权限:
- 先确认运行ASP.NET Core的用户:如果是你手动用
dotnet run启动,就是当前登录的pi用户;如果用nginx反向代理或者systemd托管,可能是www-data用户 - 修改目录权限:
sudo chmod -R 755 /home/pi/MyAspNetApp/Data - 修改文件所有者(替换成你的运行用户):
sudo chown -R pi:pi /home/pi/MyAspNetApp/Data # 如果是www-data用户就用下面的命令 # sudo chown -R www-data:www-data /home/pi/MyAspNetApp/Data
3. 确认数据库文件是否存在且可用
- 如果是新应用需要自动创建数据库,确保你的DbContext里有初始化逻辑,比如在
Program.cs里添加:using (var scope = app.ApplicationServices.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>(); dbContext.Database.EnsureCreated(); // 自动创建数据库和表结构 } - 如果是从Windows复制过来的数据库文件,先检查文件完整性:在树莓派终端执行
ls -l /home/pi/MyAspNetApp/Data,看文件大小是否和原文件一致;也可以手动用SQLite命令行测试:
如果手动都打不开,说明文件损坏或者路径错误,先解决这个问题再启动应用sqlite3 /home/pi/MyAspNetApp/Data/app.db
4. 检查连接字符串格式
确保appsettings.json里的连接字符串格式正确,比如:
"ConnectionStrings": { "DefaultConnection": "Data Source=/home/pi/MyAspNetApp/Data/app.db;" }
注意:JSON里不需要转义正斜杠,直接写就行;末尾的分号可加可不加,但别写错路径。
内容的提问来源于stack exchange,提问作者Mar Tin
相关产品推荐
相关产品推荐

