OSX机器运行MAMP。CakePHP 2.2.1安装和配置正确(这意味着当我浏览到Index.php文件时,我有所有的绿色条,我已经完成了博客教程,正在开发我的第二个应用程序,脚手架正在运行)。现在我第一次尝试烘焙。
根据食谱(和其他),我将cake的新副本安装到一个目录(我的用户目录)中,然后将路径变量放在我的.bash_profile文件中export PATH="$PATH:/Users/p_scott/cake221/app/Console"
之后,我可以进入终端,键入cake
并打开控制台。你可以看到,到那时为止,我一直在从应用程序目录调用控制台。
我首先尝试使用-app参数从终端运行cake bake
,并指定我的练习应用程序的路径。我第一次这样做时,我得到了以下
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
文件夹,从我的应用程序中尝试控制台。我要么收到相同的错误,要么它问我不同的问题,比如:
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
我在Apache中没有php.ini文件(因为我在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
)。一旦我尝试了这个,我要么得到了关于我想使用什么布局的问题,要么。。。有一次,我能够让烘焙应用程序要求我创建一个数据库配置。我完成了这些步骤,它在最后消除了这个错误:
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
文件中的默认DB配置。
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证明的安装不同,因此它不了解数据库服务器。
尝试在app/Config/database.php
文件中将localhost
更改为127.0.0.1
,这样就可以了。
类似的事情发生在我身上,我发现最简单的方法是将localhost更改为127.0.0.1,并在末尾添加端口号,例如,MAMP使用端口号8899,因此:
"mysql:host=127.0.0.1:8889"