В настоящее время я читаю «Начало работы с CakePHP: от новичка к профессионалу» Дэвида Голдинга. В какой-то момент мне нужно использовать команду CLI «выпечка торта», я получаю приветственный экран, но когда я пытаюсь испечь, например Контроллер я получаю следующие сообщения об ошибках:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
Я подозреваю, что сообщения об ошибках связаны с тем, что php пытается получить доступ к неправильному mysql-сокету, а именно к mysql-сокету по умолчанию, вместо того, который использует MAMP. Поэтому я изменяю конфигурацию своей базы данных для подключения к mysql-сокету UNIX (: /Applications/MAMP/tmp/mysql/mysql.sock):
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'persistent' => false,
'host' =>':/Applications/MAMP/tmp/mysql/mysql.sock', // UNIX MySQL-socket
'login' => 'my_user',
'password' => 'my_pass',
'database' => 'blog',
'prefix' => '',
);
}
Но я получаю те же сообщения об ошибках с новым сокетом:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock:3306' (2) in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 117
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 122
Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 130
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Applications/MAMP/htdocs/blog/cake/libs/model/datasources/dbo/dbo_mysql.php on line 154
Error: Your database does not have any tables.
Кроме того, хотя я использую UNIX-сокет, который MAMP показывает на приветственном экране, CakePHP теряет соединение с базой данных при использовании этого сокета вместо localhost.
Есть идеи, как заставить работать выпечку?
- Редактировать 1 -
Спасибо, ребята, что помогли мне! :)
У меня проблема с определением того, где в my.cnf редактировать, чтобы MySQL слушал запрос TCP / IP. Единственный абзац, который я могу найти, где упоминается TCP / IP, это следующий:
# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
Это позволяет мне полностью отключить TCP / IP, что противоречит моим намерениям. Я не знаю, как делать то, что вы предлагаете, если бы вы могли быть более подробными, было бы здорово. Я абсолютный новичок в этих вопросах: S
Рег. подключение к локальному сокету: я удалил начальное двоеточие в параметре хоста, результат тот же.






Из-за ошибки похоже, что он пытается подключиться к реальному IP-адресу, а не к сокету UNIX, посмотрите:
'/Applications/MAMP/tmp/mysql/mysql.sock:3306'
Он добавляет порт к сокету, что неверно.
Итак, я сначала попробую настроить MySQL для прослушивания запросов TCP / IP (отредактируйте соответствующий раздел в my.cnf) и попробую предоставить 127.0.0.1 вместо сокета.
Если вы не будет прокручиваться вниз:
Чтобы исправить это на уровне CakePHP, измените хост в database.php на 'localhost' и добавьте директиву порта со значением, установленным на имя сокета '/Applications/MAMP/tmp/mysql/mysql.sock'
Да, была аналогичная проблема, я думаю, что указание на socket: portno, как предложил Винко, может сработать, однако, если вы используете ip-адрес / localhost, все будет в порядке.
У меня была такая же проблема при использовании MAMP и Cake CLI. Я использую CakePHP 1.1xxx и MAMP 1.7.
Проблема в том, что сокет MySQL не может быть найден: D
Откройте Терминал и введите следующее:
my-macbook:~ chris$ php -i | grep mysql.default_socket
mysql.default_socket => no value => no value
my-macbook:~ chris$ php -i -c /Applications/MAMP/conf/php5 | grep mysql.default_socket
mysql.default_socket => /Applications/MAMP/tmp/mysql/mysql.sock => /Applications/MAMP/tmp/mysql/mysql.sock
Загвоздка в том, что без явного указания двоичному файлу php пути к его (прочтите MAMP) конфигурационному файлу mysql.default_socket не устанавливается.
Используя это, мне вообще не нужно было менять конфигурацию моей базы данных.
class DATABASE_CONFIG
{
public $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'account',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'port' => '/var/mysql/mysql.sock'
);
}
Это сработало для меня:
class DATABASE_CONFIG
{
public $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'account',
'password' => 'password',
'database' => 'database',
'prefix' => '',
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock'
);
}
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
У меня была такая же проблема с mamp, и я исправил ее с помощью приведенной выше команды. Я думаю, вам нужно запускать эту команду каждый раз, когда вы перезагружаете компьютер. Может быть, есть лучший способ сделать это, но я использую его с clix.app, поэтому обычно он выполняется довольно быстро. Кроме того, измените свой хост на localhost.
Попробуйте настроить брандмауэр ... Так было со мной!
Я нахожу решение этой проблемы: Добавьте конфигурацию сокета в файл cakephp app / config / database.php
class DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock', // here is the key !
'login' => 'you',
'password' => 'yourpass',
'database' => 'yourdb',
'prefix' => '',
);
Это был настоящий ответ. Спасибо, Жюльен.
Также можно сделать символьную ссылку, bake ищет mysql.sock в / tmp
как это:
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
Ура, Эббот.
Для тех, кто сталкивается с этой проблемой при использовании CakePHP 2.0: для меня указанные выше файлы конфигурации базы данных не помогли. Однако нашел свойство unix_socket, которое сработало для меня:
<?php
class DATABASE_CONFIG {
public $default = array(
'datasource' => 'Database/Mysql',
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'unix_socket' => '/tmp/mysql.sock',
'login' => 'xxx',
'password' => 'xxx',
'database' => 'xxx',
'encoding' => 'UTF8',
'prefix' => ''
);
}
Что касается меня, я забыл установить порт на хосте, так как я не использовал порт MySQL по умолчанию в MAMP.
т.е. если ваш порт MySQL - 8889, установите host на localhost:8889.
Возможно, специфичен для CakePHP, но ввод
'host' =>'localhost'вdatabase.phpзаставит его попытаться подключиться к локальному файлу сокета. Изменение этого параметра на'host' =>'127.0.0.1', как предполагает этот ответ, решит проблему.