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;
}
?>
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!
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.
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.
J'ai changé 'Host' => 'localhost' en 'Host' => '127.0.0.1' sur app/config/database.php et tout fonctionne correctement
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
La peine de vérifier pour voir si Mysql est en cours d'exécution aussi.
Je pense qu'il suffit de redémarrer le mysql et Apache, c'est un travail pour moi.
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.
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.
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
Redémarrer mysql a fonctionné pour moi:
Sudo /etc/init.d/mysql restart