Polecenia Symfony a XAMPP (głównie chodzi o M)
Czytam obecnie w wolnych chwilach wstęp do nowej wersji Symfony. Jak to często bywa zaciąłem się już na samym początku, a konkretnie na tworzeniu modelu danych. W przypadku gdy zamiast normalnej instalacji AMPP w systemie, używasz pakietu XAMPP, to całkiem możliwe, że napotkasz kilka drobnych błędów konfiguracji w trakcie używania "generatorów" będących elementem Symfony. Ten fakt jest głównym powodem powstania tej notki. Na samym początku, aby wogóle dało się interpretować skrypty PHP uruchamiane z poziomu shella, trzeba zainstalować pakiet php5-cli.
sudo apt-get install php5-cli
Od tej pory będą działać polecenia do generowania nowego projektu, pluginów - znanych do tej pory jako moduły (przy okazji: jak sensownie przetłumaczyć ang. bundle?) oraz klas modelu danych. Problem pojawia sie w momencie gdy zechcemy zmiany wprowadzić do bazy danych za pomocą polecenia:
php app/console doctrine:schema:update --force
Oto błąd jaki napotkałem:
[PDOException] could not find driver
Aby komunikacja z bazą zadziałała, należy zainstalować pakiet php5-mysql. PHP5 ma wsparcie dla sqlite, nie zaszkodzi więc odrazu zainstalować pakiety sqlite i php5-sqlite.
sudo apt-get install php5-mysql sqlite php5-sqlite
Następnie trzeba włączyć moduły pdo i pdo-mysql w pliku php.ini. XAMPP oczywiście korzysta z własnego php.ini - innego niż systemowy. Dlatego należy upewnić się, że zmiany wprowadzamy w odpowiednim pliku. Ścieżkę do plików o danej nazwie można odnaleźć m.in. za pomocą polecenia locate. Następnie należy wyedytować odpowiedni plik:
locate php.ini /etc/php5/cli/php.ini /opt/lampp/etc/php.ini /opt/lampp/etc/php.ini-pre1.7.2 /usr/share/doc/php5-common/examples/php.ini-development /usr/share/php5/php.ini-production /usr/share/php5/php.ini-production-dist /usr/share/php5/php.ini-production.cli sudo gedit /etc/php5/cli/php.ini
Powinny w tym pliku występować poniższe wiersze, jeżeli nie występują, należy je dodać:
extension=pdo.so extension=pdo_mysql.so
Upewniamy się, że moduły: PDO i pdo_mysql są ładowane, wydając polecenie w terminalu:
php -m
Jeśli znajdują sie na liście, wszystko powinno działać. Życie byłoby jednak wtedy zbyt proste. Po wszystkich tych zmianach w momencie ponownej próby aktualizacji bazy za pomocą doctrine:schema:update, miałem wątpliwą przyjemność napotkać kolejny błąd:
[PDOException] SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
Do dzisiaj nie jestem pewien dlaczego, ale okazało się, że wszystko zaczyna działać gdy zmienię adres hosta bazy danych, w ustawieniach mojego projektu Symfony (app/config/parameters.ini) z "localhost" na "127.0.0.1".
[parameters]
database_driver="pdo_mysql"
database_host="127.0.0.1"
database_name="example"
database_user="root"
...
Zawsze myslałem, że zapisy te są równoważne - jak widać, jakimś trafem jednak nie w moim systemie.
Komentarze
bardzo ciekawe, dzieki
czwartek, 8 December, 2011 - 17:17 — elispusiaNapisz komentarz