OSX работает под управлением MAMP. CakePHP 2.2.1 установлен и настроен должным образом (это означает, что у меня есть все зеленые полосы, когда я просматриваю файл Index.php, я завершил учебник по блогам и работаю над своим вторым приложением, с которым работают строительные леса). Теперь я пытаюсь испечь в первый раз.
В кулинарной книге (и других) я установил новую копию торта в каталог (каталог моих пользователей), а затем поместил переменную пути в мой файл .bash_profile export PATH="$PATH:/Users/p_scott/cake221/app/Console"
после чего я смог войти в Терминал, напечатать cake
и принести консоль. Вы можете видеть, что до этого момента я вызывал консоль из каталога приложений.
Сначала я попытался cake bake
с терминала с помощью параметра -app и обозначил путь к моим практическим приложениям. В первый раз, когда я это сделал, я получил следующее
Welcome to CakePHP v2.2.1 Console ------------- App : app Path: /Applications/MAMP/htdocs/blog/app/ ------------- Interactive Bake Shell --------------- [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [F]ixture [T]est case [Q]uit What would you like to Bake? (D/M/V/C/P/F/T/Q) > c -------------------- Bake Controller Path: /Applications/MAMP/htdocs/blog/app/Controller/ -------------------- \Use Database Config: (default/test) [default] >
,Welcome to CakePHP v2.2.1 Console ------------- App : app Path: /Applications/MAMP/htdocs/blog/app/ ------------- Interactive Bake Shell --------------- [D]atabase Configuration [M]odel [V]iew [C]ontroller [P]roject [F]ixture [T]est case [Q]uit What would you like to Bake? (D/M/V/C/P/F/T/Q) > c -------------------- Bake Controller Path: /Applications/MAMP/htdocs/blog/app/Controller/ -------------------- \Use Database Config: (default/test) [default] >
Независимо от того, что я вложил в базу данных (если я оставлю ее пустой, она снова спрашивает меня), но любой ответ дает мне следующую ошибку:
Warning Error: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) in [/Users/p_scott/cake221/lib/Cake/Model/Datasource/Database/Mysql.php, line 149] Error: Database connection "SQLSTATE[HY000] [2002] No such file or directory" is missing, or could not be created. #0 /Users/p_scott/cake221/lib/Cake/Model/Datasource/DboSource.php(260): Mysql->connect() #1 /Users/p_scott/cake221/lib/Cake/Model/ConnectionManager.php(101): DboSource->__construct(Array) #2 /Users/p_scott/cake221/lib/Cake/Console/Command/Task/ModelTask.php(906): ConnectionManager::getDataSource('default') #3 /Users/p_scott/cake221/lib/Cake/Console/Command/Task/ControllerTask.php(396): ModelTask->getAllTables('default') #4 /Users/p_scott/cake221/lib/Cake/Console/Command/Task/ControllerTask.php(419): ControllerTask->listAll(NULL) #5 /Users/p_scott/cake221/lib/Cake/Console/Command/Task/ControllerTask.php(136): ControllerTask->getName() #6 /Users/p_scott/cake221/lib/Cake/Console/Command/Task/ControllerTask.php(61): ControllerTask->_interactive() #7 /Users/p_scott/cake221/lib/Cake/Console/Command/BakeShell.php(113): ControllerTask->execute() #8 /Users/p_scott/cake221/lib/Cake/Console/Shell.php(393): BakeShell->main() #9 /Users/p_scott/cake221/lib/Cake/Console/ShellDispatcher.php(201): Shell->runCommand(NULL, Array) #10 /Users/p_scott/cake221/lib/Cake/Console/ShellDispatcher.php(69): ShellDispatcher->dispatch() #11 /Users/p_scott/cake221/app/Console/cake.php(33): ShellDispatcher::run(Array) #12 {main}
Как только я начал получать эту ошибку, я попытался перейти на терминал в папку <cake install dir>/app/Console
и <different instance of cake install dir>/app/Console
папки <different instance of cake install dir>/app/Console
чтобы попробовать консоль из моих приложений. Я либо получаю те же ошибки, либо задает мне разные вопросы, например:
What is the path to the project you want to bake? [/Users/p_scott/myapp] > /Applications/MAMP/htdocs/history/app What is the path to the directory layout you wish to copy? [/Applications/MAMP/htdocs/history/lib/Cake/Console/Templates/skel] >
PHP CLI установлен и, похоже, работает
PHP 5.3.8 (cli) (built: Dec 5 2011 21:24:09) Copyright (c) 1997-2011 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
Моя поддержка PDO, похоже, включена. В терминале я набрал:
php --ri pdo PDO PDO support => enabled PDO drivers => mysql, sqlite, sqlite2
У меня нет файла php.ini в Apache (потому что я нахожусь на Mac), но в каталоге PHP 5.36 у меня есть следующие расширения:
extension=imap.so extension=yaz.so extension=mcrypt.so extension=gettext.so extension=pgsql.so extension=pdo_pgsql.so extension=pdo_mysql.so
После перерыва я нашел статью (http://www.dereuromark.de/2011/10/31/freshly-baked-cake2-0-tips/), в которой говорится об изменении местоположения консоли в версии 2.0. Я должен попытаться использовать его из этого места ( <cake installed dir>/lib/Cake/Console
). Как только я попробовал это, у меня возникли вопросы о том, какой макет я хотел использовать, или … ОДНАЖДЫ, я смог заставить приложение bake попросить меня создать конфигурацию базы данных. Я прошел через этапы, и это закончилось этой ошибкой в конце:
Fatal error: Class 'DATABASE_CONFIG' not found in /Applications/MAMP/htdocs/history/lib/Cake/Console/Command/Task/DbConfigTask.php on line 264
Это приводит меня к еще одной информации. Это моя конфигурация БД по умолчанию в файле <cake installation dir>/history/app/Config/database.php
.
class DATABASE_CONFIG { public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'cakeHistoryUser', 'password' => 'cakeHistoryPassword', 'database' => 'cake_history', 'prefix' => '', //'encoding' => 'utf8', );
Прежде чем публиковать этот вопрос (и всю эту информацию), я трачу некоторое время на качественное время, и, похоже, большинство моих проблем связаны с CLI, но я просто не вижу, где мне нужно что-то менять и часов и часов позже, Мне нужна помощь.
Помоги мне Оби Ван, ты моя единственная надежда
Проблема в том, что вы пытаетесь взаимодействовать с базой данных через командную строку, однако PHP-CLI – это другая установка, чем тот, который подтвержден MAMP, поэтому он не знает о сервере базы данных.
Попробуйте изменить localhost
на 127.0.0.1
в файле app/Config/database.php
и это должно сделать трюк.
Что-то подобное произошло со мной, и самый простой способ заставить его работать, который я не вижу здесь, – это изменить localhost на 127.0.0.1 и добавить номер порта в конце, например, MAMP использует номер порта 8899, так что:
"MySQL: хост = 127.0.0.1: 8889"