絶対間違ってないのに謎のSyntax Error or Parse Error
Laravelのキャッシュが原因になっていることが多い。
めんどくさい時は以下のコマンドでキャッシュを一切合切全て消すことができる。
副作用にはご注意を。
php artisan key:generate
composer dump-autoload
php artisan clear-compiled
php artisan optimize
php artisan config:cache
キャッシュを消しても謎のエラーが直らない時
コードを修正した直後になることが多い。
Vagrant側のキャッシュが原因であることが90%(他10%ぐらいは実は見落とし)なので、Vagrantを再起動すると普通に動く。
どうやらApache2のキャッシュが相当しぶとく強いようで、このエラーになるそう。
コマンドはHomesteadなどVagrantが動いているディレクトリで以下。
vagrant reload
このエラーが一番困る...(typoなのかキャッシュなのか原因がわかりにくい)
MySQLのDB(Homestead以外)に接続できない
PDOException: SQLSTATE[HY000] [1044] Access denied for user 'username'@'localhost' to database 'databasename'
こんな感じのエラーが出た時は、書いてあるユーザーのデータベース接続権限がないことが原因。
Laravelで複数のデータベースを用いてプロジェクトを動かす時とかになる。
まずMySQLにrootで接続する。
mysql -u root -p
この時、パスワードを聞かれるが、Homesteadそのままのパスワードなら "secret" で接続できる。
さらに以下コマンドを実行。userデータベースからホストやユーザ名などの情報を取得する。
select Host, User from mysql.user;
ここで、上記エラーに書かれている'username'@'hostname'が存在していない場合がある。その時は以下のコマンドでユーザを追加する。
CREATE USER 'username'@'hostname' IDENTIFIED BY 'secret';
該当ユーザの情報を確認できたら、さらに以下のコマンドでユーザに権限を付与する。
grant all on *.* to username@hostname;
これで接続ができるようになっているはずなので確認してみてください。
(この方法、権限全部あげちゃってるので危険な気がしますが...他の方法を知っている方はコメント欄で教えていただけると助かります。)
Laravel5.5でcomposer installができない
laravel create-projectを動かしているときに以下のエラーが出ることがある。
[RuntimeException]
Could not delete /home/vagrant/code/appname/vendor/kylekatarnls/
update-helper/src/UpdateHelper:
書いてある通り、kylekatarnls/
update-helper/src/UpdateHelperがのinstall時にエラーを吐いている。
このライブラリが何かスクリプトを実行しようとして、拒否られているっぽい。
この場合、エラーを吐いてinstallが止まった後に、プロジェクトディレクトリに移動したのち以下のオプションをつけて再度installを行う。
composer install --no-plugins
これでおそらくインストールが完了するはず。副作用については未検討なのでご注意ください。
DataBaseを追加する
例えばHomesteadを用いてデータベースを扱っているときは、デフォルトのデータベースがhomesteadという名前で作成され使用される。
ここで、開発環境用やテスト環境用に別のデータベースを使用したい場合がある。
この場合は以下のようにapp/config/database.phpに以下を追記する。
'{new database}' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => '{database name}',
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
これは元から配置されているmysql用のデータベースをコピペしたもの。
これを追記することで仕様の準備が整う。
あとは適当にcomposer dump-autoload
やvagrant reload
とかして環境をリフレッシュしたら多分動く(はず)。
ユーザの方の権限設定も忘れずに。