В настоящее время я читаю Дэвид Голдинг «Начало CakePHP: от новичка к профессионалу». В какой-то момент я должен использовать CLI-команду «take bake», я получаю приветственный экран, но когда я пытаюсь испечь, например, контроллер, я получаю следующие сообщения об ошибках:
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-socket osx по умолчанию, вместо того, который использует MAMP. Поэтому я изменяю свои конфигурации базы данных для подключения к UNIX mysql-socket (: /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, что является противоположностью моему намерению. Я не знаю, как идти по тому, что вы предлагаете, если бы вы могли быть более сложными, это было бы здорово. Я всего лишь n00b по этим вопросам: S
Рег. подключение к локальному сокету: я удалил ведущий двоеточие в параметре host, такой же результат.
Из этой ошибки похоже, что она пытается подключиться к фактическому IP-адресу, а не к сокету UNIX, посмотрите:
'/Applications/MAMP/tmp/mysql/mysql.sock:3306'
Он добавляет порт в сокет, что неверно.
Поэтому сначала я попытаюсь настроить MySQL для прослушивания запросов TCP / IP (отредактируйте соответствующий раздел в my.cnf) и попробуйте предоставить 127.0.0.1 вместо сокета.
Если вы не прокрутите страницу вниз :
Чтобы исправить его на уровне CakePHP, измените host на database.php на «localhost» и добавьте директиву порта с его значением, установленным на имя сокета '/Applications/MAMP/tmp/mysql/mysql.sock'
Я нахожу решение этой проблемы: добавьте конфигурацию сокета в файл приложения 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' => '', );
Для тех, кто сталкивается с этой проблемой при использовании 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' => '' ); }
У меня была та же проблема при использовании 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 пути к его конфигурационному файлу (read MAMP), mysql.default_socket не установлен.
Используя это, мне не нужно было менять конфигурацию базы данных вообще.
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
У меня была такая же проблема с маской, и она была исправлена с помощью приведенной выше команды. Я думаю, что вы должны запускать эту команду каждый раз, когда вы перезагружаете компьютер. Может быть, есть лучший способ сделать это, но я использую это с clix.app, так что это обычно довольно быстро. Кроме того, измените свой хост на localhost.
Для меня я забыл установить порт на хосте, поскольку я не использовал порт MySQL по умолчанию в MAMP.
т.е. если ваш порт MySQL равен 8889, установите host
для localhost:8889
.
У меня была аналогичная проблема, я думаю, указывая на сокет: portno, как предложил Vinko, может работать, но если вы используете ip-адрес / localhost, все будет в порядке.
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' ); }
Попробуйте настроить брандмауэр … Это было для меня!
Вы также можете сделать символическую ссылку, испечь ищет mysql.sock в / tmp
как это:
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
Привет, Эббот.