2015-09-11 2 views
9

Я создаю веб-приложение в Laravel 5. Приложение должно получать «имена категорий», хранящиеся в базе данных MySQL, и отображать форму для добавления новой «Имена категорий». Когда я выполняю команду php artisan serve и я перейти к http://localhost:8000/admin/categories/, я получаю следующее сообщение об ошибке:PHP Laravel: соединение не может быть сделано, потому что целевая машина активно отказалась от него

PDOException in Connector.php line 50: 
SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it. 

По несколько постов, которые я прочитал на переполнение стека, многие пользователи сталкиваются эту ошибку, не правильно сконфигурировать файл .env, который переопределяет настройки по умолчанию для объекта данных PHP (PDO), как указано в файле database.php. Файл .env определен ниже:

DB_HOST=localhost 
DB_DATABASE=homestead 
DB_USERNAME=homestead 
DB_PASSWORD=secret 

И ключ тузд в файле database.php определяется как:

'mysql' => [ 
      'driver' => 'mysql', 
      'host'  => env('DB_HOST', 'localhost'), 
      'database' => env('DB_DATABASE', 'homestead'), 
      'username' => env('DB_USERNAME', 'homestead'), 
      'password' => env('DB_PASSWORD', 'secret'), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 

Как ни странно, когда я SSH в моей виртуальной машине, и я бегу mysql -uhomestead -psecret homestead, Я могу подключиться к базе данных. Вопрос в том, почему Laravel не может подключиться к MySQL, когда я могу напрямую подключиться к нему с теми же параметрами? Что еще может отрицать доступ к Laravel?

+0

Вы запускаете свой файл через усадьбу? или местных? – aldrin27

+0

Я получаю то же сообщение в любом случае – jstein

+0

Возможно, это поможет вам http://stackoverflow.com/questions/32373592/best-way-to-set-up-laravel-with-dev/32374119#32374119 – aldrin27

ответ

4

Я изменил адрес ip, указанный в homestead.yaml, с localhost до 192.168.10.10. Затем я запустил homestead provision, и это, похоже, устранило проблему. Хост-машина не может разрешить localhost или 127.0.0.1, поскольку она уже сопоставлена ​​с самим собой.

+0

для меня это woks с 127.0.0.1 до тех пор, пока я нахожусь на своем vm (homestead ssh) – Olof

+0

Для меня изменение DB_HOST на 192.168.10.10 решило его. – lehel

1

У меня такая же проблема с Wampserver. Это сработало для меня:

Вы должны изменить этот файл: "C: \ wamp \ bin \ mysql [mysql_version] \ my.ini" Например: "C: \ wamp \ bin \ mysql [mysql5.6.12] \ my.ini»порт

и изменение по умолчанию 3306 до 80. (линии 20 & 27, в обоих) порт = 3306 к порту = 80

Я надеюсь, что это полезно.

А затем просто зайдите на панель управления и запустите Apache & Сервисы MySQL.

1

Почему Laravel не может подключиться к MySQL, когда я могу подключиться к нему напрямую с теми же параметрами?

Давай, env('DB_HOST', 'localhost') нигде так же, как NULL и env('DB_USERNAME', 'homestead') нигде так же, как homestead

Вы не можете назвать «те же» такие разные вещи, как в явном виде при условии буквального, отсутствующего параметра или результат некоторые функции! Это три разные вопросы!

Вы можете сказать, "то же самое", только если вы предоставите буквально те же параметры в обоих случаях:

mysql -hlocalhost -uhomestead -psecret homestead 

для оболочки и

'mysql' => [ 
     'driver' => 'mysql', 
     'host'  => 'localhost', 
     'database' => 'homestead', 
     'username' => 'homestead', 
     'password' => 'secret', 

для Laravel.

+0

Правда, я вызываю функцию для импорта параметров подключения. К сожалению, когда я заполняю массив символьными парами ключ-значение, я все равно получаю одно и то же сообщение об ошибке. – jstein

0

В окнах, просто отключить Persimissions доступа пользователей (UAC) . Открыть пробег -типа msconfing и нажмите Enter -Перейти для инструментов и смотреть for.UAC множество типа никогда не уведомлять -Restart ПК, это будет

Не забудьте разрешить его через брандмауэр при появлении запроса.

1

Причины могут быть:

Если вы пытаетесь получить доступ к БД из другого сервера то наиболее аферист проблемы, с которыми сталкиваются является доступ БД ограничен только для локального хоста/127.0.0.1

Решение: может изменить my.cnf (на Ubuntu снова находится в /etc/mysql/my.cnf) и изменить следующие:

bind-address = 0.0.0.0 

или

bind-address = SERVER_PUBLIC_IP_ADDRESS 

Рекомендую создать пользователя дб вместо корня и удалить корень использования, как это не безопасно, чтобы обеспечить доступ к базе данных с любого IP с суперпользователя.

Если вы пытаетесь подключиться DB из того же сервера:

Решение: Просто используйте TCP/IP вместо сокета Unix. Вы сделаете это, используя 127.0.0.1 вместо localhost при подключении. Однако сокет Unix может быть быстрее и безопаснее.

После изменения, сделанные у вас есть перезапуска MySQL службы

sudo service mysql restart 
0

В моем случае я написал в файл .env в DB_HOST адрес виртуальной машины, как по умолчанию в Homestead (192.168.10.10). Но он работает только для artisan migrate. Однако использование приложений для подключения этого db «удаленно» требует использования IP-адреса 127.0.0.1.

Надеюсь, что это поможет кому-то.

0

Я изменил

DB_HOST = локальный

в

DB_HOST = локальный: 3307

в .env файле

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

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