質問: cakephp3でログイン認証画面を作成しました。 アクセスするとログイン画面が出てIDとパスワードを求める用になっています。 ローカル環境ではうまく動作していたのですが 作成したプログラムをサーバーにデプロイし IDとパスワードを入力してログインをしようとするとエラーが出てしまいます。 > > Database Error > > > Error: SQLSTATE[HY000] [2002] No such file or directory > > > If you are using SQL keywords as table column names, you can enable identifier quoting for your database connection in config/app.php. > > > おそらくDBへの接続が原因だと思うのですが原因がつかめません。 usernameなど、正しいものから、間違っているものへ変更しても エラーの設定に変化はありませんでした。 リファレンスを見ながらapp.phpのdefaultを下記のように変更いたしました。 ``` app.php 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', 'username' => 'xxxxxx', 'password' => 'xxxxxx', 'database' => 'xxxxx', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'quoteIdentifiers' => true, 'url' => env('DATABASE_URL', null), ], ``` cakephpではそもそもapp.phpがどのタイミングで読み込まれているのでしょうか? 開発環境はcloud9 サーバーはheroku DBはclearDB を使用しております。 ご教授ください。よろしくお願い致します。
回答: 以下の記述が影響しているのではないでしょうか。 ``` 'url' => env('DATABASE_URL', null) ``` urlによる指定とhostなどによる指定の両方を設定するとどうなるかわかりませんが、マニュアルだと片方しか指定していないので、どちらかにしたほうがよいかと。 ※軽く試した感じだとurlが優先されるような感じがしました。なのでDATABASE_URLの値を見直してみてください。 なお、app.phpですが、リクエスト毎に、かなり序盤に実行されます。 具体的には、webroot/index.phpがconfig/bootstrap.phpを呼び ``` require dirname(__DIR__) . '/config/bootstrap.php'; ``` config/bootstrap.phpがapp.phpを読んでいます。 ``` Configure::load('app', 'default', false); ```