我使用sqlite数据库为用户登录系统创建了一个新的Laravel应用程序。我遇到了一个奇怪的问题,我收到以下错误:
SQLSTATE [HY000]:常规错误:8尝试编写只读数据库 (SQL:更新“users”设置“remember_token”= HH0dtQYZ5BgoOpya1hNRUrFvIZF0dcYqdIvAjz0k6CbTKBqah7wWPdQbgzzL, “updated_at”= 2016-06-18 12:47:43其中“id”= 1)
我最初认为我的sqlite db文件存在一些权限问题,但正确的用户有权访问该文件,我已将chmod设置为755
。
如果我刷新页面(并重新发送表单数据)应用程序成功登录,则只会在第一次登录时出现此问题。对于我的应用程序中的任何其他数据库操作,我没有遇到此问题。
有人可以帮我诊断问题是什么吗?
答案 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等),则数据库所在的文件夹必须具有写权限权限以及实际的数据库文件。