Laravel:尝试写入只读数据库错误

时间:2016-06-18 12:52:46

标签: php sqlite laravel

我使用sqlite数据库为用户登录系统创建了一个新的Laravel应用程序。我遇到了一个奇怪的问题,我收到以下错误:

  

SQLSTATE [HY000]:常规错误:8尝试编写只读数据库   (SQL:更新“users”设置“remember_token”=   HH0dtQYZ5BgoOpya1hNRUrFvIZF0dcYqdIvAjz0k6CbTKBqah7wWPdQbgzzL,   “updated_at”= 2016-06-18 12:47:43其中“id”= 1)

我最初认为我的sqlite db文件存在一些权限问题,但正确的用户有权访问该文件,我已将chmod设置为755。 如果我刷新页面(并重新发送表单数据)应用程序成功登录,则只会在第一次登录时出现此问题。对于我的应用程序中的任何其他数据库操作,我没有遇到此问题。

有人可以帮我诊断问题是什么吗?

2 个答案:

答案 0 :(得分:0)

对于可能需要此功能的任何人,检查您的文件权限

如果您的database.sqlite文件位于database/下,请将权限设置为775(755对我不起作用)。

$ chmod -R 775 database

将小组设置为www-data并将所有者设置为自己也是值得的。

$ chgrp -R www-data database
$ chown -R USERNAME database

显然将database替换为.sqlite数据库所在文件夹的路径。还要检查任何迁移命令后的权限,或passport:install。我确定这是用户错误,但有一次我认为我已经在递归上设置了目录的文件权限,但实际的.sqlite文件已经以某种方式恢复为644,并且所有者和组都是我的用户。

这可能是因为我弄乱了构建脚本,但我的观点是 - 第二次检查比挖掘SO问题更快。

另外值得注意的是,如果您有一些路由正常工作,但其他路由失败并且出现500错误,请检查您的表中实际上至少有一行数据。我建议创建播种机并运行php artisan passport:install以生成一些初始数据。

答案 1 :(得分:0)

事实证明,问题在于PDO SQLite驱动程序要求如果要执行写操作(INSERT,UPDATE,DELETE,DROP等),则数据库所在的文件夹必须具有写权限权限以及实际的数据库文件。