3

运行 MAMP 的 OSX 机器。CakePHP 2.2.1 已正确安装和配置(这意味着当我浏览到 Index.php 文件时,我看到所有绿色条,我已经完成了博客教程,并且正在开发我的第二个应用程序,其中脚手架已启动并运行)。现在我第一次尝试烘焙。

根据食谱(和其他人),我将蛋糕的新副本安装到目录(我的用户目录)中,然后将路径变量放在我的 .bash_profile 文件中 export PATH="$PATH:/Users/p_scott/cake221/app/Console" ,之后我可以进入终端,键入 cake并让控制台出现向上。您可以看到,到目前为止,我一直在从 app 目录调用控制台。

我首先尝试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] >

无论我为数据库输入了什么(如果我将其留空,它会再次询问我),但任何答案都会给我以下错误:

    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文件夹以从我的应用程序/s 中尝试控制台。我要么得到同样的错误,要么它问我不同的问题,比如:

    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这是我在文件中的默认数据库配置。

    class DATABASE_CONFIG {

public $default = array(
    'datasource' => 'Database/Mysql',
    'persistent' => false,
    'host' => 'localhost',
    'login' => 'cakeHistoryUser',
    'password' => 'cakeHistoryPassword',
    'database' => 'cake_history',
    'prefix' => '',
    //'encoding' => 'utf8',
   );

在发布这个问题(以及所有这些信息)之前,我在这里度过了一些高质量的时间,看起来我的大多数问题都与 CLI 相关,但我只是看不到我需要在几个小时后更改某些内容,我需要帮助。

帮帮我欧比旺,你是我唯一的希望

4

2 回答 2

7

问题是您试图通过命令行与数据库交互,但是 PHP-CLI 与 MAMP 证明的安装不同,因此它不知道数据库服务器。

尝试在您的文件中更改localhost为,这应该可以解决问题。127.0.0.1app/Config/database.php

于 2012-08-02T21:23:12.550 回答
1

像这样的事情发生在我身上,我发现让它工作的最简单的方法是把 localhost 更改为 127.0.0.1 并在末尾添加端口号,例如,MAMP 使用端口号 8899,所以:

“mysql:主机=127.0.0.1:8889”

于 2013-06-11T05:30:42.437 回答