Erreur Symfony fix propel-insert-sql Impossible de se connecter au serveur MySQL local

Après avoir construit votre modèle et le code SQL pour le représenter, symfony offre un mécanisme pour insérer le code SQL directement dans votre base de données configurée. Si vous exécutez MySQL localement, cela devrait fonctionner pour vous sans configuration supplémentaire. Si vous utilisez MySQL sur un autre serveur, comme cela se produit couramment dans l'hébergement Web partagé et d'autres environnements, vous obtiendrez une erreur. Dans le passé, je venais de grogner et d’envoyer manuellement le code SQL à la base de données, mais il existe une solution simple pour que les choses fonctionnent comme il se doit.


Si votre instance MySQL ne s'exécute pas localement ou n'est pas configurée pour utiliser un socket pour la communication (ou si le fichier du socket ne se trouve pas à l'emplacement par défaut), vous recevrez une erreur comme celle-ci lorsque vous essayez d'effectuer un 'symfony propel-insert- sql 'commande:

L'exécution de la cible "insert-sql" a échoué pour la raison suivante: /mnt/pear/php/symfony/vendor/propel-generator/build-propel.xml:296:1: [wrapped: connect failed [erreur native: peut ' ne vous connectez pas au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock' (2)] [Informations utilisateur: Tableau]]

Obtenir une telle erreur peut tuer votre rythme dans un cycle d'horloge. Le fait est que forcer cette erreur et appliquer manuellement le code SQL à la base de données fonctionnera. Si vous avez les paramètres de connexion à la base de données corrects dans config / databases.yml, symfony se connectera correctement à la base de données pour les opérations d'application normales. Le problème est que Propel a ses propres informations de configuration de base de données dans config / propel.ini

Tout ce que vous avez à faire pour résoudre ce problème est de copier la chaîne de connexion de config / databases.yml dans config / propel.ini, en remplaçant le paramètre 'propel.database.url' qui a pour valeur par défaut 'mysql: // localhost / nomprojet 'où' nomprojet 'est le nom de votre projet symfony.

La ligne 'dsn' dans le fichier databases.yml contient la chaîne de connexion, quelque chose comme:

dsn: mysql: // nom d'utilisateur: [email protected] / dbname

Laissez la partie 'dsn:' et copiez le 'mysql: //….' et le reste de la ligne et remplacez la chaîne de connexion dans la ligne config / propel.ini qui commence par 'propel.database.url' par votre chaîne de connexion, comme suit:

propel.database.url = mysql: // nom d'utilisateur: [email protected] / dbname

Si la chaîne de connexion est correcte (et votre fichier schema.yml est en ordre), vous devriez maintenant être en mesure de faire un 'symfony propel-insert-sql' sans erreur.