3

MAMP を実行している OSX マシン。CakePHP 2.2.1 がインストールされ、適切に構成されています (つまり、Index.php ファイルを参照すると、すべて緑色のバーが表示されます。ブログのチュートリアルを完了し、足場が稼働している 2 つ目のアプリに取り組んでいます)。今、初めて焼いてみました。

クックブック(およびその他)に従って、ケーキの新しいコピーをディレクトリ(ユーザーディレクトリ)にインストールし、.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] >

データベースに何を入力しても(空白のままにすると、もう一度尋ねられます)、どの回答でも次のエラーが表示されます。

    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

一息ついてから、2.0 でコンソールの位置が変わったという記事 (http://www.dereuromark.de/2011/10/31/freshly-baked-cake2-0-tips/) を見つけました。その場所から使ってみる必要があります ( <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

これにより、もう1つの情報が得られます。<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 関連のようですが、何かを変更する必要がある場所がわかりません。何時間も後に、助けが必要です。

助けてオビワン、あなただけが私の希望です

4

2 に答える 2

7

問題は、コマンドラインを介してデータベースと対話しようとしていることですが、PHP-CLIはMAMPによって証明されたものとは異なるインストールであるため、データベースサーバーについて認識していません。

ファイル内でに変更localhostしてみて127.0.0.1くださいapp/Config/database.php。そうすればうまくいくはずです。

于 2012-08-02T21:23:12.550 に答える
1

このようなことが私に起こりました。私が見つけた最も簡単な方法は、localhost を 127.0.0.1 に変更し、最後にポート番号を追加することです。たとえば、MAMP はポート番号 8899 を使用するため、次のようになります。

"mysql:host=127.0.0.1:8889"

于 2013-06-11T05:30:42.437 に答える