Symfony Fix propel-insert-sql-fel Kan inte ansluta till lokal MySQL-server

Efter att ha byggt din modell och SQL-koden för att representera den, erbjuder symfony en mekanism för att infoga SQL-koden direkt i din konfigurerade databas. Om du kör MySQL lokalt borde det fungera för dig utan ytterligare konfiguration. Om du kör MySQL på en annan server, vilket är vanligt i delat webbhotell och andra miljöer får du ett fel. I det förflutna har jag bara gruntat och skickat SQL-koden till databasen manuellt, men det finns en enkel lösning för att få saker att fungera som de borde.


Om din MySQL-instans inte körs lokalt eller inte är konfigurerad för att använda ett uttag för kommunikation (eller om socketfilen inte finns i standardplatsen) får du ett fel så här när du försöker göra en "symfony propel-insert- sql 'kommando:

Utförandet av målet "insert-sql" misslyckades av följande skäl: /mnt/pear/php/symfony/vendor/propel-generator/build-propel.xml:296:1: [wrapped: connect failed [Native Error: Can ' t ansluta till lokal MySQL-server via socket '/var/run/mysqld/mysqld.sock' (2)] [Användarinfo: Array]]

Att få ett sådant fel kan bara döda ditt spår i en klockcykel. Saken är att tvinga genom det här felet och manuellt tillämpa SQL-koden till databasen kommer att fungera. Om du har rätt inställningar för databasanslutning i config / databases.yml, ansluts symfony korrekt till databasen för normal applikation. Problemet är att Propel har sin egen databaskonfigurationsinformation i config / propel.ini

Allt du behöver göra för att åtgärda detta problem är kopiera anslutningssträngen från config / databases.yml till config / propel.ini, ersätter inställningen 'propel.database.url' som har ett standardvärde för 'mysql: // localhost / projektnamn "var" projektnamn "är namnet på ditt symfonyprojekt.

Dsn-raden i databaser.yml innehåller anslutningssträngen, något liknande:

dsn: mysql: // användarnamn: [email protected] / dbname

Lämna "dsn:" delen där och kopiera "mysql: // ...." och resten av raden och ersätt anslutningssträngen i config / propel.ini-raden som börjar med "propel.database.url" med din anslutningssträng, som:

propel.database.url = mysql: // användarnamn: [email protected] / dbname

Om anslutningssträngen är korrekt (och din schema.yml-fil är i ordning) borde du nu kunna göra en "symfony propel-insert-sql" utan fel.