Cake PHP не строит модели - PullRequest
0 голосов
/ 20 марта 2012

Я создал свою базу данных и использовал cake bake my_project для создания своего проекта, и теперь, когда я пытаюсь использовать cake bake all форму в каталоге моего проекта, я получаю сообщение об ошибке, касающееся Mysql. Когда я просматриваю свой проект из браузера, он все светится зеленым, включая подключение к базе данных.

Warning Error: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in [/Users/billy/Documents/projects/cakephp/lib/Cake/Model/Datasource/Database/Mysql.php, line 160]

Есть идеи о том, о чем эта ошибка?


РЕДАКТИРОВАТЬ : Добавлены соответствующие подробности конфигурации (php --info | grep mysql)

Я действительно не знаю, что искать здесь, но, может быть, кто-то знает ...

$ php --info |grep mysql
Configure Command =>  '/var/tmp/apache_mod_php/apache_mod_php-53.3.1~2/php/configure'  '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-dependency-tracking' '--sysconfdir=/private/etc' '--with-apxs2=/usr/sbin/apxs' '--enable-cli' '--with-config-file-path=/etc' '--with-libxml-dir=/usr' '--with-openssl=/usr' '--with-kerberos=/usr' '--with-zlib=/usr' '--enable-bcmath' '--with-bz2=/usr' '--enable-calendar' '--with-curl=/usr' '--enable-exif' '--enable-ftp' '--with-gd' '--with-jpeg-dir=/BinaryCache/apache_mod_php/apache_mod_php-53.3.1~2/Root/usr/local' '--with-png-dir=/BinaryCache/apache_mod_php/apache_mod_php-53.3.1~2/Root/usr/local' '--enable-gd-native-ttf' '--with-ldap=/usr' '--with-ldap-sasl=/usr' '--enable-mbstring' '--enable-mbregex' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-mysql-sock=/var/mysql/mysql.sock' '--with-iodbc=/usr' '--enable-shmop' '--with-snmp=/usr' '--enable-soap' '--enable-sockets' '--enable-sysvmsg' '--enable-sysvsem' '--enable-sysvshm' '--with-xmlrpc' '--with-iconv-dir=/usr' '--with-xsl=/usr' '--enable-zend-multibyte' '--enable-zip' '--with-pcre-regex=/usr'
mysql
Client API version => mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $
mysql.allow_local_infile => On => On
mysql.allow_persistent => On => On
mysql.connect_timeout => 60 => 60
mysql.default_host => no value => no value
mysql.default_password => no value => no value
mysql.default_port => no value => no value
mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysql.default_user => no value => no value
mysql.max_links => Unlimited => Unlimited
mysql.max_persistent => Unlimited => Unlimited
mysql.trace_mode => Off => Off
mysqli
Client API library version => mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $
PDO drivers => mysql, sqlite, sqlite2
pdo_mysql
Client API version => mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $
pdo_mysql.default_socket => /var/mysql/mysql.sock => /var/mysql/mysql.sock

Редактировать: Подробнее

Я попробовал предложение от @ 0k32, но, к сожалению, оно не сработало для меня. Я софт связал php из своей папки XAMPP с /usr/bin/php и проверил, что он правильный с which php. Затем я сделал php --info | grep sock и получил:

MYSQL_SOCKET => /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
mysql.default_socket => /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock => /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
MYSQLI_SOCKET => /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
mysqli.default_socket => /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock => /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

Что, по-видимому, указывает на то, что активируется правильная версия MySQL. Тем не менее я получаю точно такую ​​же ошибку.

1 Ответ

2 голосов
/ 21 марта 2012

Я думаю, что эта проблема может возникнуть из-за различных файлов конфигурации (php.ini), используемых модулем php apache и php командной строки. Настройки по умолчанию для соединений mysql могут отличаться в этих конфигах. Сравните phpinfo() вывод из apache и php --info из командной строки.

Обновление:

В вашем случае кажется, что вы используете MacOS и используете MAMP / MAMP PRO. Я тоже. И у меня была такая же проблема. Мое решение было очень простым. Я заменил бинарный файл php cli по умолчанию на символическую ссылку на бинарный файл MAMP php:

$ sudo mv /usr/bin/php /usr/bin/php_default
$ sudo ln -s /Applications/MAMP/bin/php/php5.3.6/bin/php /usr/bin/php

php MAMP подключается к MySQL через /Applications/MAMP/tmp/mysql/mysql.sock по умолчанию, а в командной строке MacOS по умолчанию php пытается использовать /var/mysql/mysql.sock.

В любом случае, я думаю, что хорошей практикой является использование одного и того же php с одинаковыми настройками как для web, так и для клиентов.

обновление:

Более разумным решением было бы не заменить php по умолчанию, а просто добавить путь к двоичным файлам php MAMP в PATH. Так в вашем ~/.bash_profile:

export PATH=/Applications/MAMP/bin/php/php5.3.6/bin:$PATH

Исправьте это, если необходимо. Затем снова откройте терминал или выполните это: source ~/.bash_profile. Затем вы можете проверить, какой php вы используете, выполнив which php. Это должно указывать на php MAMP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...