2009-10-28 14 views
8

Jestem nowy w CakePHP i właśnie przechodzę przez proces konfiguracji, ale jestem zaskoczony, dlaczego Cake nie może uzyskać dostępu do mojej bazy danych MySQL. Strona informacji Ciasto mówi mój tmp katalog jest zapisywalny The FileEngine jest używany do buforowania (nie wiem co to znaczy), a mój plik konfiguracyjny bazy danych jest obecny, ale CakePHP nie może połączyć się z bazą danych.CakePHP: Nie mam dostępu do bazy danych MySQL

Oto moje dane konfiguracyjne:

  • PHP 5.3 (preinstalowany na Snow Leopard)
  • MySQL 5.01.40 64-bitowy
  • CakePHP 1.2.4.8284

Tutaj to kroki, przez które przeszedłem:

  • Utworzono schemat MySQL wywoływany cake_blog
  • Utworzono nazwie cake_blog_user
  • użytkownika MySQL prawda cake_blog_user odpowiednimi uprawnieniami na cake_blog @ localhost i cake_blog @%
  • skopiowany plik database.php.default do database.php i edytować szczegóły połączenia z bazą danych, jak stosowne

Oto odpowiednie dane konfiguracyjne z database.php:

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

Am I brakuje czegoś tutaj? Należy również wspomnieć, że jeśli wstawić echo mysql_error(); do pliku /cake/libs/view/pages/home.ctp tuż przed Sprawdza połączenie z bazą danych, błąd wyświetlany jest „Nie ma takiego pliku lub katalogu”. Nie mam pojęcia, o jakim pliku lub katalogu mowa.

Dzięki!

+0

Co twoja konfiguracja bazy danych wyglądać, tzn jakie parametry będzie zwykle używać do łączenia się z nim? Prześlij szczegóły pliku database.php. – deceze

+2

Wychodzę na kończyny i domyślam się, że mysql.sock nie znajduje się już w standardowej lokalizacji. – nduplessis

+0

Niezupełnie jest to rozwiązanie dla tego konkretnego problemu, ale miałem wielki sukces w tworzeniu ciastek na Macu przy użyciu MAMP zawierał podobny do LAMPA stos). Być może popatrz na to. – inkedmn

Odpowiedz

8

Jeśli jest to gniazdo, tylko edytować /etc/php.ini odzwierciedlać następujące

pdo_mysql.default_socket=/tmp/mysql.sock 

i

mysql.default_socket = /tmp/mysql.sock 
1

Dzięki wszystkim za wskazujące mnie we właściwym kierunku. Plik mysql.sock został przeniesiony do /tmp/mysql.sock zamiast domyślnej lokalizacji pod /var/mysql/mysql.sock. Edytowanie pliku php.ini w celu odzwierciedlenia tego rozwiązało problem.

+1

Jak wyżej wspomniano nduplessis, możesz również rozwiązać ten problem, tworząc dowiązanie symboliczne: 'sudo ln -s /tmp/mysql.sock/var/mysql/mysql.sock' (upewnij się, że' sudo mkdir/var/mysql/'first!) W ten sposób nie musisz się martwić o edycję pliku php.ini. – Jared

6

Wierzę, można również wykonać następujące

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

robi to może oznaczać, trzeba edytować plik database.php gdy idziesz na żywo na serwerze produkcyjnym.

+0

Tak, to też działa. Dzięki! – Jared

9

Co zwykle gryzie mnie to, że MySQL myśli „localhost” jako „połączyć thru gniazda unix” i „127.0.0.1” „połączyć thru portu TCP”. W przypadku rzeczy takich jak XAMPP (przynajmniej na mac) nie ma pliku gniazda unix. Zamiast tego wystarczy użyć 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' => '', 
); 

Powinien działać cały czas.

+1

+1 to zadziałało dla mnie i wydaje się najmniej inwazyjne –

0

sprawdź swoje phpinfo i użyj wymienionego gniazda. to zadziałało dla mnie.

0

W systemie Ubuntu, jeśli zainstalowałeś wersję 7.0 i 5.6 PHP, to nie zadziała.

Będziesz musiał przełączyć jeśli masz obie wersje:

zwracasz jeśli jest wersja 7.0: Polecenie jest php -v.

Następny temat

sudo a2dismod php7.0 
sudo a2enmod php5.6 
sudo service apache2 restart 
Powiązane problemy