2009-10-28 12 views
8

Sono nuovo di CakePHP e sto solo eseguendo il processo di configurazione, ma sono rimasto sorpreso dal motivo per cui Cake non può accedere al mio database MySQL. La pagina delle informazioni sulla torta dice che la mia directory tmp è scrivibile, FileEngine viene utilizzato per la memorizzazione nella cache (non so cosa significhi), e il mio file di configurazione del database è presente, ma CakePHP non può connettersi al database.CakePHP: impossibile accedere al database MySQL

Qui sono i miei dati di configurazione:

  • PHP 5.3 (pre-installato su Snow Leopard)
  • MySQL 5.1.40 a 64 bit
  • CakePHP 1.2.4.8284

Qui sono i passi che ho passato:

  • Creato uno schem MySQL una chiamata cake_blog
  • Creato un utente MySQL chiamato cake_blog_user
  • Concesso cake_blog_user le autorizzazioni appropriate per cake_blog @ localhost e cake_blog @%
  • copiato il file database.php.default per database.php e curato i dettagli della connessione database appropriata

Ecco l'dati di configurazione rilevanti database.php:

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

mi manca qualcosa qui? Vorrei anche ricordare che se inserisco uno echo mysql_error(); nel file /cake/libs/view/pages/home.ctp prima di testare la connessione al database, l'errore visualizzato è "Nessun file o directory". Non ho idea di quale file o directory stia parlando.

Grazie!

+0

cosa fa la configurazione del database assomigliare, vale a dire quali parametri vorresti solito utilizzare per connettersi ad esso? Pubblica i dettagli del file database.php. – deceze

+2

Uscirò su un arto e suppongo che mysql.sock non sia più nella posizione standard – nduplessis

+0

Non esattamente una soluzione a questo specifico problema, ma ho avuto un grande successo nello sviluppo di cake su un Mac usando MAMP (auto- conteneva stack simile a LAMP). Forse dai un'occhiata a quello. – inkedmn

risposta

8

Se è la presa, basta modificare /etc/php.ini per riflettere la seguente

pdo_mysql.default_socket=/tmp/mysql.sock 

e

mysql.default_socket = /tmp/mysql.sock 
1

Grazie a tutti per avermi nella giusta direzione. Il file mysql.sock è stato spostato su /tmp/mysql.sock anziché sulla posizione predefinita su /var/mysql/mysql.sock. La modifica del file php.ini per riflettere ciò ha risolto il problema.

+1

Come sopra note nduplessis, puoi anche risolvere questo problema creando un link simbolico come questo: 'sudo ln -s /tmp/mysql.sock/var/mysql/mysql.sock' (assicurati di avere' sudo mkdir/var/mysql/'first!) In questo modo non devi preoccuparti di modificare il file php.ini. – Jared

6

credo è anche possibile effettuare le seguenti operazioni

<?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',    
    ) 
?> 

fare questo potrebbe significare è necessario modificare il file database.php quando si va in diretta sul server di produzione.

+0

Sì, anche questo funziona. Grazie! – Jared

9

Ciò che di solito mi morde è che MySQL pensa a 'localhost' come 'connect thru the unix socket' e '127.0.0.1' 'connect thru TCP port'. Con cose come XAMPP (almeno su mac) il file socket unix non c'è. Basta usare 127.0.0.1 invece.

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

Dovrebbe funzionare sempre.

+1

+1 questo ha funzionato per me e sembra meno invasivo –

0

controllare il phpinfo e utilizzare la presa elencata. quello ha funzionato per me.

0

Su Ubuntu, se si sono installate entrambe le versioni 7.0 e 5.6 di PHP, questo non funzionerà.

Youll bisogno di cambiare se si dispone di entrambe le versioni:

guardare prima se è 7,0 versione: il comando è php -v.

successivo non

sudo a2dismod php7.0 
sudo a2enmod php5.6 
sudo service apache2 restart 
Problemi correlati