Dopo aver creato il modello e il codice SQL per rappresentarlo, symfony offre un meccanismo per inserire il codice SQL direttamente nel database configurato. Se esegui MySQL localmente, questo dovrebbe funzionare senza una configurazione aggiuntiva. Se stai eseguendo MySQL su un altro server, come è comune nel web hosting condiviso e in altri ambienti, riceverai un errore. In passato, ho appena grugnito e inviato manualmente il codice SQL al database, ma c'è una soluzione semplice per far funzionare le cose come dovrebbero.
Se la tua istanza MySQL non è in esecuzione localmente o non è configurata per utilizzare un socket per la comunicazione (o il file socket non si trova nella posizione predefinita) riceverai un errore come questo quando proverai a fare un 'symfony propel-insert- comando sql ':
L'esecuzione del target "insert-sql" non è riuscita per il seguente motivo: /mnt/pear/php/symfony/vendor/propel-generator/build-propel.xml:296:1: [wrapped: connect failed [Native Error: Can ' t connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2)] [Informazioni utente: Array]]
Ottenere un errore del genere può solo uccidere il tuo groove in un ciclo di clock. Il fatto è che forzare questo errore e applicare manualmente il codice SQL al database funzionerà. Se si dispone delle impostazioni corrette per la connessione al database in config / databases.yml, symfony si connetterà correttamente al database per le normali operazioni dell'applicazione. Il problema è che Propel ha le proprie informazioni di configurazione del database in config / propel.ini
Tutto ciò che devi fare per risolvere questo problema è copiare la stringa di connessione da config / databases.yml in config / propel.ini, sostituendo l'impostazione 'propel.database.url' che ha un valore predefinito di 'mysql: // localhost / projectname 'dove' projectname 'è il nome del tuo progetto symfony.
La riga 'dsn' nel databases.yml contiene la stringa di connessione, qualcosa del tipo:
dsn: mysql: // username: [email protected] / dbname
Lascia la parte 'dsn:' lì e copia 'mysql: // ....' e resto della riga e sostituire la stringa di connessione nella riga config / propel.ini che inizia con 'propel.database.url' con la stringa di connessione, come:
propel.database.url = mysql: // username: [email protected] / dbname
Se la stringa di connessione è corretta (e il tuo file schema.yml è in ordine) dovresti essere in grado di fare un 'symfony propel-insert-sql' senza errori.