web-dev-qa-db-fra.com

Installation de Laravel sur un Mac php artisan migration error: aucun fichier ou répertoire de ce type

  1. Tiré un projet parfaitement fonctionnel laravel d'un git dans un mac exécutant MAMP. Le projet fonctionnait parfaitement sur une machine Linux.
  2. compositeur installer
  3. php artisan migrate, a obtenu l'erreur suivante:

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

NB: php -v est 5.5 et mysql -v est 5.5 depuis le terminal Voici une partie de mon config/database.php

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

J'ai essayé de remplacer localhost par 127.0.0.1 sans succès. Aide aimablement..

Edit: J'ai ajouté ces trois lignes dans mon 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

J'ai aussi ajouté ce lien symbolique:

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

Mais cela n'a pas résolu. J'ai aussi tiré un nouveau projet laravel de git et ai rencontré la même erreur après composer install puis php artisan migrate

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

La version mac est 10.7.4

45
Mwirabua Tim

Si vous utilisez MAMP, veillez à ajouter le unix_socket clé avec une valeur du chemin que le mysql.sock réside dans 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'    => '',
    ),
171
keithics

N'assumez pas votre unix_socket qui serait différent de l'un à l'autre, essayez de le trouver.

Tout d'abord, récupérez votre emplacement unix_socket.

$ mysql -uroot -p

Entrez votre mot de passe mysql et connectez-vous à votre serveur mysql en ligne de commande.

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

Votre unix_soket pourrait être différent.

Ensuite, vous avez 2 solutions pour résoudre votre problème:

(1) Change ton 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) Changez votre php.ini, trouvez votre php.ini fichier de

<? phpinfo();

Vous pouvez peut-être installer beaucoup de php avec des versions différentes, alors s'il vous plait, ne supposez pas l'emplacement de votre fichier php.ini, récupérez-le à partir de votre 'phpinfo';

Changez votre 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

Puis redémarrez votre Apache ou php-fpm.

20
lijinma

Avait le même problème, mais cela fonctionne pour moi maintenant.

Si quelqu'un a encore des problèmes, essayez ceci:

  • Assurez-vous que votre bootstrap/start.php contient votre nom d'hôte actuel, pas le nom de votre hôte virtuel. Entrez hostname dans le terminal pour obtenir votre nom d’hôte. Comme c'est un tableau, je pense que vous pouvez entrer à la fois votre nom d'hôte et le (s) nom (s) de votre/vos hôte (s) virtuel (s).
  • Remplacez "localhost" par "127.0.0.1".
16
Nick

Si vous utilisez XAMPP, la solution est la suivante:

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

Cela fonctionne pour moi dans Laravel 5.0, modifiez le DB_Host = 127.0.0.1: 3306 dans le fichier .env.

Les autres réponses ne fonctionnent pas ...

9
Igor Trindade

Pour Laravel 5.0+ modifier localhost en 127.0.0.1 dans votre fichier .env avant de jouer avec Unix Sockets, etc. - cela a fonctionné pour moi.

Noobs beware: Si vous utilisez Laravel 5 et utilisez du matériel d'apprentissage plus ancien, sachez que la structure des dossiers a considérablement évolué par rapport aux versions précédentes, même si cela semble être pour le mieux - consultez cet article. https://mattstauffer.co/blog/laravel-5.0-directory-structure-and-namespace

5
brianjlennon

Si vous utilisez la version Laravle 5.1.11 + MAC + MAMPP

vous devez ajouter "Unix_socket" dans le fichier "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,
],

Le paramètre Unix_socket a été ajouté au lecteur de configuration mysql ci-dessus.

3
jai

Une autre solution consiste à ajouter le numéro de port dans la clé de l'hôte. Dans ce cas, MAMP utilise le 8889 par défaut:

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