2015-12-27 7 views
2

У меня есть странная проблема с миграциями Laravel 4.2, так как я пытался использовать Homestead в качестве среды разработки. Когда я делаю php artisan migrate я получаю следующее сообщение об ошибке:php artisan migrate игнорирует настройки в локальном каталоге среды для базы данных

[PDOException]   
SQLSTATE[HY000] [1045] Access denied for user 'prod'@'localhost' (using password: YES) 

Laravel использует настройки базы данных из моей производственной среды, Allthough 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, 
     ), 
[...] 
    ), 

); 

Неужели кто-нибудь знает, как узнать, где проблема?

ответ

0

Я могу видеть в сообщении об ошибке ваше имя пользователя: prod. Таким образом, вы должны использовать это:

'username' => 'prod', 
'password' => 'your_password', 

Примечание: Редактирование database.php является одним из видов жесткого кодирования. И этот файл можно увидеть, если вы загрузите проект до github. Я всегда предпочитаю использовать .env для настройки базы данных и электронной почты.

+0

Я не знаю и не могу ничего найти в документации относительно .env файл. Обратите внимание, что я говорю о Laravel 4.2 (не 5.2, где ваш путь - это путь), где, согласно документам, создается каталог с соответствующим именем и переопределяет настройки в этих каталогах (см. Https: // laravel. com/docs/4.2/configuration # environment-configuration) – Tom

+0

Если вы не понимаете, игнорируйте '.env' пока. Предоставьте правильное 'username' &' password' в 'database.php' в качестве моего ответа. – smartrahat

+0

Я действительно понимаю, как .env работает. Но такой конфигурации в Laravel 4.2 не существует. Я предоставляю правильное имя пользователя и пароль для базы данных в '/ app/config/local/database.php' (для моей локальной среды разработчиков) и в'/app/config/database.php' для моей рабочей среды. Не имеет смысла изменять настройки в '/ app/config/database.php', так как это нарушит мою производственную среду. Ключевое слово здесь: Почему Laravel игнорирует мои ошибки в '/ app/config/local/database.php'? – Tom

0

Попробуйте установить значения в файле .env, а не hardcoding их в database.php. Затем используйте константы в массиве mysql database.php. Это будет выглядеть примерно так:

'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, 
    ], 

Я бы сначала прокомментировал, но у меня недостаточно сильная репутация. Сожалею.

+0

Я знаю конфигурацию .env в Laravel 5.2, но не в 4.2. Согласно документам (https://laravel.com/docs/4.2/configuration # environment-configuration) создание каталога с именем среды и переопределением настроек есть способ пойти в этой версии или я что-то пропустил? – Tom

0

В случае, если кто-либо еще ищет этот ответ, проблема, освещенная в комментариях к вопросу, связана с использованием файла .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', 
 
);

 Смежные вопросы

  • Нет связанных вопросов^_^