Laravel + SQLite = SQLSTATE [HY000]常规错误:8尝试编写只读数据库

时间:2017-12-15 15:49:14

标签: php laravel sqlite lumen

我试图删除db.sqlite文件,再次创建它,然后在同一个方法中插入一些信息,这就是我使用的方法:

public function destroy()
{
    // Store all contents and delete the first one since this is created via seeder
    $contents = $this->contents->all()->toArray();
    array_shift($contents);

    // Delete db file, creates it from an example file and changes permissions
    system('rm -rf ../database/database.sqlite');
    system('cp ../database/database.sqlite.example ../database/database.sqlite');
    system('chmod 0777 ../database/');
    system('chmod 0777 ../database/database.sqlite');

    // Insert data
    foreach ($contents as $content) {
        $this->contents->create($content);
    }

    return response()->json(['message' => 'Data has been destroyed!']);
}

然而,当我尝试运行它时,我得到标题中描述的错误:

SQLSTATE[HY000]General Error: 8 attempt to write a readonly database

我对该文件和文件夹 给予了777权限,这是其他问题答案所推荐的,所以我不知道它为什么不是工作

5 个答案:

答案 0 :(得分:7)

你需要继续推行

首先,将laravel目录的所有权更改为Web组

sudo chown -R :www-data /var/www/yourLarvelFolder

赋予存储目录特权,使其可写。

sudo chmod -R 775 /var/www/yourLarvelFolder/storage

答案 1 :(得分:1)

如果您使用带有Selinux记忆体的Fedora或Redhat来关闭Selinux(或正确配置):

setenforce 0

答案 2 :(得分:0)

最后,我通过使用不同的方法解决了这个问题,一种方法是删除数据库并再次创建(返回所有内容),然后第二种方法将所有内容插入新数据库。

答案 3 :(得分:0)

首先运行以下命令来检查apache2的用户。通常是www-data

ps aux | grep "apache2"

然后运行以下命令来解决您的问题。

chgrp -R www-data your_application_directory
chmod -R g+rw your_application_directory

答案 4 :(得分:0)

在ubuntu中授予在 18.04 和laravel 6

上工作的权限
sudo chmod -R 775 database
sudo chown -R $(whoami) database