web-dev-qa-db-fra.com

Dépannage de "Aucun fichier ou répertoire de ce type" lors de l'exécution de `php app/console doctrine: schema: create`

Je suis nouveau sur Symfony2 (beta4) et Doctrine et j'ai des problèmes lorsque j'essaie de créer le schéma de base de données via une ligne de commande.

Voici l'erreur:

$ php app/console doctrine:schema:create

Creating database schema...

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

[ErrorException]                                                                                          
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) 
in /Applications/MAMP/htdocs/sf-test-2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php line 36

Les paramètres de la base de données mysql sont correctement insérés dans le fichier config/parameters.ini.

Et voici la configuration de la doctrine dans config.yml

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        Host:     %database_Host%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

Et l'entité (je n'en ai fait qu'une pour la tester)

<?php
// src/Acme/NewsBundle/Entity/Article.php
namespace Acme\NewsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="articles")
 */
class Article
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
protected $id;

/**
 * @ORM\Column(type="string", length="255")
 */
protected $title;

/**
 * @ORM\Column(type="text")
 */
protected $body;

/**
 * @ORM\Column(type="string", length="255")
 */
protected $author;

/**
 * @ORM\Column(type="date")
 */
protected $date;
}
?>
36
LBridge

Je l'ai corrigé en suivant ce petit tutoriel: http://andreys.info/blog/2007-11-07/configuring-terminal-to-work-with-mamp-mysql-on-leopard

[EDIT]: J'ai modifié le bon php.ini et tout fonctionne bien maintenant.

Maintenant, j'obtiens l'erreur suivante:

[Exception]                                                                                            
 DateTime::__construct(): It is not safe to rely on the system's timezone settings.
 You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
 In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
 We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead 

Voici la configuration date.timezone dans php.ini

date.timezone = "Europe/Paris"

Je vais essayer de le comprendre moi-même, mais si l'un d'entre vous sait comment y remédier, n'hésitez pas à faire un commentaire à ce sujet. Merci!

5
LBridge

Trop tard, mais j'espère que cela pourra aider quelqu'un.

Aujourd'hui, je tombe dans une situation similaire (mais dans un autre contexte, j'essayais de créer des entités à partir de db).

Je l'ai résolu en modifiant simplement database_Host de "localhost" en "127.0.0.1" dans le fichier parameters.ini.

Je pense que mon instance de Mysql ne s'exécute que via TCP et non pas socket, et que, lorsque cette option est utilisée, database_Host = "localhost", elle échoue.

152
EricSonaron

Essayez d'ajouter cette ligne 

unix_socket: /tmp/mysql.sock

dans votre fichier config.yml> doctrine> dbal juste après la ligne de mot de passe.

19
Saperlipopette

J'ai changé 'Host' => 'localhost' en 'Host' => '127.0.0.1' sur app/config/database.php et tout fonctionne correctement

11
victormfv

Le problème pour moi était le paramètre mysql.default_socket dans PHP.INI par défaut à un emplacement différent de celui où MySQL place réellement ce fichier.

Au lieu d'éditer les fichiers de configuration, j'ai créé un alias à l'emplacement recherché par PHP qui se connecte au vrai mysql.sock.

Il suffit d’exécuter ces deux commandes (aucun redémarrage requis):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
2
Justin

La peine de vérifier pour voir si Mysql est en cours d'exécution aussi.

0
Isaac

Je pense qu'il suffit de redémarrer le mysql et Apache, c'est un travail pour moi.

0
Reyno D'Wolfer

Parfois, vous pouvez avoir plusieurs solutions pour le chemin d’emplacement de mysql.lock. Mais je pense que la meilleure solution est de voir le chemin d’emplacement de mysql en utilisant la fonction php phpinfo().

Remarque: si vous n'êtes pas familier avec phpinfo(), créez simplement un fichier avec le nom de votre choix et incluez le contenu de ce fichier comme ceci

<?php
phpinfo();
?>

lancez ce fichier et obtenez le chemin du fichier mysql.lock. Je pense que ça aidera. 

0
Mehedi Hasan

Trop tard, mais espérons que cela pourra aussi aider quelqu'un.

J'utilise vagabond

Il suffit de changer localhost en 127.0.0.1 ET de changer le port en 3333

a fonctionné parfaitement.

0
Fabio Valencio

Avait le même problème "SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type" sur symfony 3.2.9 sur le déploiement

Je l'ai corrigé en remplaçant la valeur database_Host de "localhost" par l'adresse IP de mon serveur sur mon fichier parameters.yml.

mais j'avais un autre message d'erreur lorsque j'essayais de lancer Commandline par SSH:

[Doctrine\DBAL\Exception\ConnectionException] Une exception s'est produite dans le pilote: SQLSTATE [HY000] [2002] Connexion refusée

Je le répare finalement en ajoutant ces 2 lignes sur mon fichier config.yml dans la section de configuration de Doctrine:

unix_socket: /var/lib/mysql/mysql.sock
server_version: '5.5'

toute ma configuration finale de doctrine est comme ceci: 

doctrine:
    dbal:
        driver: pdo_mysql
        Host: '%database_Host%'
        port: '%database_port%'
        dbname: '%database_name%'
        user: '%database_user%'
        password: '%database_password%'
        unix_socket: /var/lib/mysql/mysql.sock
        server_version: '5.5'
        charset: UTF8

j'espère que cela aide

0
aina

Redémarrer mysql a fonctionné pour moi:

Sudo /etc/init.d/mysql restart

0
Geoffrey Hale