Laravel + SQLite = SQLSTATE[HY000]General Error: 8 attempt to write a readonly database

扶醉桌前 提交于 2020-08-27 10:35:09

问题


I'm trying to delete a db.sqlite file, create it again and then insert some info on this DB all in the same method, this is the method I'm using:

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!']);
}

However when I try to run it i get the error described on the title:

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

I'm giving 777 permissions to the file and the folder as recommended on others questions answers, so I have no idea why it isn't working.


回答1:


You need to run two commands

First, change ownership of the Laravel directory to web group:

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

Second, give privileges over storage directory so it can be writable:

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




回答2:


give permission here in ubuntu working on 18.04 and laravel 6

sudo chmod -R 775 database
sudo chown -R $(whoami) database



回答3:


If you are on Fedora or Redhat with Selinux rememebr to switch off Selinux (or configure it correctly):

setenforce 0



回答4:


Finally I solved it by using to different methods, one to delete the DB and create again (returning all the contents) and then, the second one to insert all the contents to the new DB.




回答5:


First run the following command to check apache2's user. Usually it is www-data

ps aux | grep "apache2"

Then run the following commands to resolve your issue.

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


来源:https://stackoverflow.com/questions/47835714/laravel-sqlite-sqlstatehy000general-error-8-attempt-to-write-a-readonly-d

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!