1. SQLite の設定でエラーが発生(P182あたり)
本の通りに進めると
Database (database/database.sqlite) does not exist. (SQL: select * from people)
というエラーが出る。書籍サポートサイトにこの箇所の修正が載っておりこう書いてある。
【誤】 DB_DATABASE=database.sqLite
【正】 DB_DATABASE=……database.sqliteのパスを指定……
今の版は DB_DATABASE=database/database.sqlite
と修正済になっているのだが、それでも同じエラーが出る。
解決方法
SQLite 選択時は、設定ファイル .env から "他のDBでは使うが SQLite では不要な設定"をコメントアウトする。
# 修正前
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret
# 修正後
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=database/database.sqlite
# DB_USERNAME=homestead
# DB_PASSWORD=secret
SQLite のデータベースファイルは、config/database.php で指定しており、DB_DATABASE をコメントアウトしても問題ない。('database' => env('DB_DATABASE', database_path('database.sqlite')),
// 環境設定の DB_DATABASE が未設定なら database/database.sqlite を設定)
他の解決方法(非推奨)
- database.php の上記で説明している箇所を
'database' => database_path('database.sqlite'),
に変更すればエラーは消える。しかし、後々他のデータベースに変える可能性があることを考慮すると… 却下 - teratail に DB_DATABASE は絶対パスで指定すれば動く という情報もあったが、環境で絶対パスが変わると書き換えなければならなし、サーバーと同期させる際、.env を対象から外す設定が必要になったりと複雑になって良くない… 却下
参考記事
2. シーディングを実行するとエラー(P223, P286)
本の通りに進めると以下のエラーが発生しシーディングできなかった。
ReflectionException : Class PeopleTableSeeder does not exist
解決方法は composer dump-autoload
するだけ。
(仮想マシンにログインし cd code/laravelapp/
、プロジェクトディレクトリに移動した状態でコマンド)
公式ドキュメントにも書いてある。
エラーの原因は、クラスが autoload されないため。
オートロードするファイルが配列でセットされているファイル(プロジェクトルート/vendor/composer/autoload_classmap.php)を上記のコマンドで更新すること解決できる。
参考記事:Laravelで名前空間を指定してオートロードされなかったら見る場所。 - Qiita
3. よくわからないパーミッションエラー (P290)
本の通りに進めると以下のエラーが発生。
There is no existing directory at "/Users/ユーザー名/code/laravelapp/storage/logs" and its not buildable: Permission denied
キャッシュクリアで解決した。
下に3つ書いたが、いずれかひとつで良いはず。
php artisan cache:clear
php artisan route:clear
php artisan config:clear
4. ルーティング設定の記載忘れ?(P324)
独自にログイン処理を実装するサンプルで、ルーティング設定が飛ばされていた。
何回も出てるパターンなので端折ってあるのかも。
web.php に以下を付け足す
Route::get('hello/auth', 'HelloController@getAuth');
Route::post('hello/auth', 'HelloController@postAuth');