【CakePHP3】Error: SQLSTATE[HY000]: General error: 8 attempt to write a readonly databaseが出たときの対処法




CakePHP3をインストールして、ブラウザからwebrootのindex.phpを開こうとしたところ下のエラーが出ました。見た目がおぞましいです。

エラー画面

結論から言えば、(app名)のフォルダ(srcフォルダやconfigフォルダなどが入っている)の「tmp」と「logs」のパーミッションを直せば、解決しました。

$ chmod -R 777 tmp
$ chmod -R 777 logs
$ls -la

drwxr-xr-x  23 macbook  staff     736  7 24 21:37 .
drwxr-xr-x   5 macbook  staff     160  7 24 21:44 ..
-rw-r--r--   1 macbook  staff     399  7 24 21:33 .editorconfig
drwxr-xr-x  12 macbook  staff     384  7 24 21:33 .git
-rw-r--r--   1 macbook  staff     954  7 24 21:33 .gitattributes
drwxr-xr-x   4 macbook  staff     128  7 24 21:33 .github
-rw-r--r--@  1 macbook  staff     569  7 24 21:37 .gitignore
-rw-r--r--   1 macbook  staff     349  7 24 21:33 .htaccess
-rw-r--r--   1 macbook  staff     855  7 24 21:33 .travis.yml
-rw-r--r--   1 macbook  staff    1677  7 24 21:33 README.md
drwxr-xr-x   5 macbook  staff     160  7 24 21:33 bin
-rw-r--r--   1 macbook  staff    1904  7 24 21:33 composer.json
-rw-r--r--   1 macbook  staff  153754  7 24 21:33 composer.lock
drwxr-xr-x  11 macbook  staff     352  7 24 21:33 config
-rw-r--r--   1 macbook  staff     649  7 24 21:33 index.php
drwxrwxrwx   5 macbook  staff     160  7 24 21:33 logs
-rw-r--r--   1 macbook  staff    1178  7 24 21:33 phpunit.xml.dist
drwxr-xr-x   3 macbook  staff      96  7 24 21:33 plugins
drwxr-xr-x   9 macbook  staff     288  7 24 21:33 src
drwxr-xr-x   5 macbook  staff     160  7 24 21:33 tests
drwxrwxrwx   6 macbook  staff     192  7 24 21:50 tmp
drwxr-xr-x  39 macbook  staff    1248  7 24 21:33 vendor
drwxr-xr-x  10 macbook  staff     320  7 24 21:33 webroot

cakePHPの公式ページの「パーミッション」という段落にも記載がありますが、cakePHPを使う上でapacheやnginxなどのウェブサーバーがtmpフォルダとlogsフォルダにアクセスする必要があります。

そのため、今回のようにパーミッションを777にしてしまったり(707でも動きます)、あるいはchownでそもそも所有者をwwwにすることでウェブサーバーがアクセスできるようにします。

#これでも可能
chown -R www:www tmp
chown -R www:www tmp

これでも直らない場合は、config/app.phpの254行目付近「’Datasources’」の項目の設定を見直してみてください。DataBaseとの接続設定はここで行っているので、ユーザー名やパスワードが間違っている可能性があります。