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

Napisz komentarz