У меня странная проблема с миграциями Laravel 4.2, так как я пытался использовать Homestead в качестве среды разработки. Когда я делаю
php artisan migrate
Я получаю следующую ошибку:
[PDOException]
SQLSTATE[HY000] [1045] Access denied for user 'prod'@'localhost' (using password: YES)
Laravel использует настройки базы данных из моей производственной среды, хотя Laravel обнаружил правильную среду:
$ php artisan env
Current application environment: local
Соответствующий файл database.php также находится на месте:
$ cat app/config/local/database.php
<?php
return array(
[...]
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'homestead',
'username' => 'homestead',
'password' => 'secret',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
),
[...]
),
);
Кто-нибудь знает, как выяснить, где проблема?
Я вижу в сообщении об ошибке ваше имя пользователя prod
, Итак, вы должны использовать это:
'username' => 'prod',
'password' => 'your_password',
Замечания: редактирование database.php
это один из видов жесткого кодирования. И этот файл можно увидеть, если вы загрузите свой проект в github
, Я всегда предпочитаю использовать .env
для базы данных и настройки электронной почты.
Попробуйте установить значения в файле .env вместо жесткого их кодирования в database.php. Затем используйте константы в массиве database.php mysql. Это будет выглядеть примерно так:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Сначала я бы прокомментировал, но у меня недостаточно сильного представителя. Сожалею.
Если кто-то все еще ищет этот ответ, проблема, освещенная в комментариях к вопросу, связана с использованием файла .env. В Laravel 4.2 самое простое решение — использовать файл .env.local.php в каталоге приложения в следующем формате:
<?php
return array(
'APP_ENV'=>'local',
'DB_HOST'=>'127.0.0.1',
'DB_PORT'=>'3306',
'DB_NAME'=>'database_name',
'DB_USER'=>'app_user',
'DB_PASS'=>'app_password',
);