2009-10-28 11 views
8

Ich bin neu bei CakePHP und laufe gerade durch den Konfigurationsprozess, aber ich bin überrascht, warum Cake nicht auf meine MySQL-Datenbank zugreifen kann. Die Cake-Infoseite sagt, dass mein Tmp-Verzeichnis beschreibbar ist, die FileEngine wird zum Caching verwendet (weiß nicht, was das bedeutet), und meine Datenbankkonfigurationsdatei ist vorhanden, aber CakePHP kann keine Verbindung zur Datenbank herstellen.CakePHP: Ich kann nicht auf die MySQL-Datenbank zugreifen

Hier sind meine Setup-Details:

  • PHP 5.3 (vorinstalliert auf Snow Leopard)
  • MySQL 5.1.40 64-bit
  • CakePHP 1.2.4.8284

Hier sind die Schritte, die ich durchging:

  • Erstellt ein MySQL-Schema a genannt cake_blog
  • einen MySQL-Benutzer cake_blog_user
  • Zugegeben cake_blog_user den entsprechenden Berechtigungen auf cake_blog @ localhost und cake_blog @%
  • Kopiert die database.php.default Datei, die die Datenbankverbindung Details database.php und bearbeitet genannt Erstellt als geeignete

hier werden die relevanten Konfigurationsdaten aus database.php ist:

 
    var $default = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'cake_blog_user', 
     'password' => 'cake_blog_password', 
     'database' => 'cake_blog', 
     'prefix' => '', 
    ); 

Fehle ich etwas hier? Ich sollte auch erwähnen, dass, wenn ich eine echo mysql_error(); in die Datei /cake/libs/view/pages/home.ctp direkt vor dem Test der Datenbankverbindung einfügt, der Fehler angezeigt wird "Keine solche Datei oder Verzeichnis". Ich habe keine Ahnung, von welcher Datei oder welchem ​​Verzeichnis die Rede ist.

Danke!

+0

Wie sieht Ihre Datenbank-Setup aussehen, das heißt, welche Parameter würden Sie in der Regel um eine Verbindung herzustellen benutzen? Veröffentlichen Sie die Details der Datei datenbank.php. – deceze

+2

Ich werde auf ein Bein gehen und denke, dass mysql.sock nicht mehr in der Standard-Speicherort ist – nduplessis

+0

Nicht genau eine Lösung für dieses spezielle Problem, aber ich hatte großen Erfolg Kuchen Entwicklung auf einem Mac mit MAMP (Selbst enthielt LAMP-artigen Stapel). Vielleicht sehen Sie sich das an. – inkedmn

Antwort

8

Wenn es der Buchse ist, bearbeiten Sie nur /etc/php.ini die folgenden

zu reflektieren
pdo_mysql.default_socket=/tmp/mysql.sock 

und

mysql.default_socket = /tmp/mysql.sock 
1

Viele Dank alle für mich in der richtigen Richtung. Die mysql.sock-Datei wurde anstelle des Standardverzeichnisses unter /var/mysql/mysql.sock in /tmp/mysql.sock verschoben. Durch das Bearbeiten der php.ini-Datei wurde das Problem behoben.

+1

Wie oben ndipessis Notizen können Sie dieses Problem auch lösen, indem Sie einen Symlink wie folgt erstellen: 'sudo ln -s/tmp/mysql.sock/var/mysql/mysql.sock' (stellen Sie sicher, Sie' sudo mkdir/var/mysql/'first!) So müssen Sie sich keine Gedanken über die Bearbeitung der php.ini-Datei machen. – Jared

6

Ich glaube, Sie können auch die

<?php 
    public $default = array(
     'driver' => 'mysql', 
     'persistent' => false, 
     'host' => 'localhost', 
     'login' => 'cake_blog_user', 
     'password' => 'cake_blog_password', 
     'database' => 'cake_blog', 
     'prefix' => '', 
     'port' => '/tmp/mysql.sock',    
    ) 
?> 

dies folgendes tun tun bedeuten könnten Sie die database.php Datei bearbeiten müssen, wenn Sie live auf dem Produktionsserver gehen.

+0

Ja, das funktioniert auch. Vielen Dank! – Jared

9

Was mich normalerweise beißt ist, dass MySQL von 'localhost' als 'Verbindung durch den Unix-Socket' und '127.0.0.1' durch TCP-Port verbinden 'denkt. Mit Dingen wie XAMPP (zumindest auf Mac) ist die Unix-Socket-Datei nicht da. Verwenden Sie stattdessen 127.0.0.1.

var $default = array(
    'driver' => 'mysql', 
    'persistent' => false, 
    'host' => '127.0.0.1', 
    'login' => 'cake_blog_user', 
    'password' => 'cake_blog_password', 
    'database' => 'cake_blog', 
    'prefix' => '', 
); 

Sollte die ganze Zeit funktionieren.

+1

+1 das funktionierte für mich und scheint am wenigsten invasiv –

0

Überprüfen Sie Ihre phpinfo und verwenden Sie den aufgeführten Socket. das hat für mich funktioniert.

0

Auf Ubuntu, wenn Sie sowohl 7.0 als auch 5.6 Versionen von PHP installiert haben, wird dies nicht funktionieren.

Youll müssen wechseln, wenn Sie beide Versionen haben:

Schauen Sie zuerst, wenn 7.0-Version: Der Befehl ist php -v.

Nächst

sudo a2dismod php7.0 
sudo a2enmod php5.6 
sudo service apache2 restart 
Verwandte Themen