Pergunta

Eu sou novo para CakePHP e estou apenas correndo através do processo de configuração, mas estou perplexo porque o bolo não pode acessar meu banco de dados MySQL. A página de informação Bolo diz meu diretório tmp é gravável, o FileEngine está sendo usado para armazenamento em cache (não sei o que isso significa), e meu arquivo de configuração de banco de dados está presente, mas que o CakePHP não pode se conectar ao banco de dados.

Aqui estão os meus detalhes de configuração:

  • PHP 5,3 (pré-instalado na neve leopardo)
  • MySQL 5.1.40 64 bits
  • CakePHP 1.2.4.8284

Aqui estão os passos que dei:

  • Criado um esquema MySQL chamado cake_blog
  • Criado um usuário MySQL chamado cake_blog_user
  • Concedido cake_blog_user as permissões apropriadas em cake_blog @ localhost e cake_blog @%
  • copiou o arquivo database.php.default para database.php e editados os detalhes de conexão do banco de dados conforme apropriado

Aqui são os dados de configuração relevantes do database.php:

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

Estou faltando alguma coisa aqui? Gostaria também de mencionar que, se eu inserir um echo mysql_error(); no direito arquivo /cake/libs/view/pages/home.ctp antes que testa a conexão de banco de dados, o erro exibido é "Nenhum tal lima ou diretório." Eu não tenho nenhuma idéia do que arquivo ou pasta que está falando.

Obrigado!

Foi útil?

Solução

Se for tomada, basta editar /etc/php.ini para refletir o seguinte

pdo_mysql.default_socket=/tmp/mysql.sock

e

mysql.default_socket = /tmp/mysql.sock

Outras dicas

O que normalmente mordem-me é que o MySQL pensa em 'localhost' como 'se conectar através de socket unix' e '127.0.0.1' 'conectar através da porta TCP'. Com coisas como XAMPP (pelo menos no Mac) o socket não está lá. Apenas uso 127.0.0.1 em seu lugar.

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

Deve funcionar o tempo todo.

Eu acredito que você também pode fazer o seguinte

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

fazendo isso pode significar que você precisa editar o arquivo database.php quando você vai ao vivo no servidor de produção.

Obrigado a todos por me apontar na direção certa. O arquivo mysql.sock foi movido para /tmp/mysql.sock vez de sua localização padrão no /var/mysql/mysql.sock. Editar o arquivo php.ini para refletir esta fixou o problema.

verificar a sua phpinfo e usar o soquete listados. que funcionou para mim.

No Ubuntu, se você instalou ambos os 7.0 e 5.6 versões do PHP esta não vai funcionar.

necessidade de Youll a opção se você tiver ambas as versões:

Olhe primeiro se é versão 7.0:. O comando é php -v

Em seguida faça

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top