Подтвердить что ты не робот

Настройка Laravel на Mac php artisan Ошибка миграции: нет такого файла или каталога

  • Вытащил отлично работающий проект laravel из git в Mac с помощью MAMP. Проект отлично работал на Linux-машине.
  • установка композитора
  • php artisan migrate, получил следующую ошибку:

    [PDOException]                                    
    SQLSTATE[HY000] [2002] No such file or directory 
    

NB: php -v равен 5.5, а mysql -v - 5.5 от терминала Вот часть моего config/database.php

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'essays',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

Я попытался заменить localhost 127.0.0.1 безрезультатно. Просьба помочь..

Edit: Я добавил эти три строки в свой php.ini

mysql.default_socket = /var/run/mysqld/mysqld.sock

mysqli.default_socket = /var/run/mysqld/mysqld.sock

pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock

Я также добавил эту символическую ссылку:

sudo mkdir /var/mysql
cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

Но это не решило. Я также вытащил новый новый проект laravel из git и столкнулся с той же ошибкой после composer install, затем php artisan migrate

 [PDOException]                                    
  SQLSTATE[HY000] [2002] No such file or directory 

Версия для Mac - 10.7.4

4b9b3361

Ответ 1

Если вы используете MAMP, обязательно добавьте ключ unix_socket со значением пути, в котором mysql.sock находится в MAMP.

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

Ответ 2

Не предполагайте, что ваш unix_socket будет отличаться от одного к другому, попытайтесь его найти.

Прежде всего, получить ваше местоположение unix_socket.

$ mysql -uroot -p

Введите пароль mysql и войдите в свой сервер mysql из командной строки.

mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| socket        | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+

Ваш unix_soket может быть разным.

Тогда у вас есть 2 решения для решения вашей проблемы:

(1) Измените config/database.php

    'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'essays',
    'username'  => 'root',
    'password'  => 'root',
    'unix_socket'   => '/opt/local/var/run/mysql5/mysqld.sock', //Your sock got from above
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

(2) Измените свой php.ini, найдите свой php.ini файл из

<? phpinfo();

Возможно, вы установили много php с другой версией, поэтому, пожалуйста, не предполагайте местоположение вашего файла php.ini, получите его из своей "phpinfo";

Измените свой php.ini:

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

Затем перезапустите apache или php-fpm.

Ответ 3

Была та же проблема, но теперь она работает для меня.

Если у кого-то все еще есть проблемы, попробуйте следующее:

  • Убедитесь, что ваш bootstrap/start.php содержит ваше фактическое имя хоста, а не имя вашего виртуального хоста. Введите hostname в терминал, чтобы получить имя хоста. Поскольку это массив, я считаю, что вы можете ввести как свое имя хоста, так и имя (имена) вашего виртуального хоста (ов).
  • Заменить "localhost" на "127.0.0.1".

Ответ 4

Если вы используете XAMPP, решение:

'mysql' => array(
        'driver'      => 'mysql',
        'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
        'host'        => 'localhost'
)

Ответ 5

Это работает для меня в Laravel 5.0, измените DB_HOST = 127.0.0.1: 33060 в .env файле.

Другие ответы не работают...

Ответ 6

Для Laravel 5.0+ измените localhost на 127.0.0.1 в вашем .ENV файле, а также перед тем, как поиграть с Unix-сокетами и т.д. - это сработало для меня.

Noobs beware: для тех, кто использует Laravel 5 и использует более старые учебные материалы, имейте в виду, что в предыдущих версиях было заметно заметное изменение структуры папок, хотя это, по-видимому, для лучшей проверки этой статьи https://mattstauffer.co/blog/laravel-5.0-directory-structure-and-namespace

Ответ 7

Другим решением является добавление номера порта в ключ хоста. В этом случае MAMP использует 8889 по умолчанию:

'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost:8889',
    'database'  => 'essays',
    'username'  => 'root',
    'password'  => 'root',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

Ответ 8

Если вы используете версию Laravle 5.1.11 + MAC + MAMPP

вам нужно добавить "Unix_socket" в файл "yourapp" /app/config/database.php

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    'strict'    => false,
],

Параметр Unix_socket был добавлен в предыдущий конфигурационный файл mysql.