Устранение неполадок "Нет такого файла или каталога" при запуске "php app/console doctrine: schema: create`

Я новичок в Symfony2 (beta4) и Doctrine, и у меня возникают проблемы, когда я пытаюсь создать схему DB через командную строку.

Здесь ошибка:

$ php app/console doctrine:schema:create

Creating database schema...

[PDOException]                                    
SQLSTATE[HY000] [2002] No such file or directory  

[ErrorException]                                                                                          
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///var/mysql/mysql.sock) 
in /Applications/MAMP/htdocs/sf-test-2/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php line 36

Настройки базы данных mysql правильно вставляются в файл config/parameters.ini.

И здесь конфигурация Doctrine в config.yml

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

И объект (я сделал только один, чтобы проверить его)

<?php
// src/Acme/NewsBundle/Entity/Article.php
namespace Acme\NewsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="articles")
 */
class Article
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
protected $id;

/**
 * @ORM\Column(type="string", length="255")
 */
protected $title;

/**
 * @ORM\Column(type="text")
 */
protected $body;

/**
 * @ORM\Column(type="string", length="255")
 */
protected $author;

/**
 * @ORM\Column(type="date")
 */
protected $date;
}
?>

Ответ 1

Я исправил это, выполнив этот небольшой учебник: http://andreys.info/blog/2007-11-07/configuring-terminal-to-work-with-mamp-mysql-on-leopard

[EDIT]: Я изменил правильный php.ini и теперь все отлично работает.

Теперь я получаю следующую ошибку:

[Exception]                                                                                            
 DateTime::__construct(): It is not safe to rely on the system timezone settings.
 You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
 In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
 We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead 

Здесь date.timezone config в php.ini

date.timezone = "Europe/Paris"

Я попытаюсь понять это сам, но если кто-то из вас знает, как его исправить, не стесняйтесь комментировать это. Спасибо!

Ответ 2

Слишком поздно, но я надеюсь, что это может помочь кому-то.

Как раз сегодня я попадаю в аналогичную ситуацию (но в другом контексте я пытался создать сущности из db).

Я решил это просто изменить database_host от "localhost" до "127.0.0.1" в файле parameters.ini.

Я думаю, что мой экземпляр Mysql работает только через TCP, а не сокет, и потому, что при использовании database_host = "localhost" он терпит неудачу.

Ответ 3

Попробуйте добавить эту строку

unix_socket: /tmp/mysql.sock

в ваш файл config.yml > doctrine > dbal сразу после строки пароля.

Ответ 4

Я изменил 'host' = > 'localhost' на 'host' = > '127.0.0.1' на app/config/database.php, и все работает правильно

Ответ 5

Проблема для меня была в настройке mysql.default_socket в PHP.INI по умолчанию в другом месте, чем где MySQL фактически помещает этот файл.

Вместо редактирования файлов конфигурации я создал псевдоним в местоположении, которое ищет PHP, который подключается к реальному mysql.sock.

Просто запустите эти две команды (перезагрузка не требуется):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Ответ 6

Иногда у вас может быть несколько решений для маршрута расположения mysql.lock. Но я думаю, что лучшее решение - это просто увидеть путь местоположения mysql, используя функцию php phpinfo().

Примечание: если вы не знакомы с phpinfo(), тогда просто создайте файл, укажите любое имя и включите содержимое этого файла, как этот

<?php
phpinfo();
?>

запустите этот файл и получите путь к файлу mysql.lock. Я думаю, это поможет.

Ответ 7

Стоит проверить, работает ли Mysql тоже.

Ответ 8

Слишком поздно, но надеюсь, что это тоже поможет кому-то.

Я использую Vagrant

Просто измените localhost на 127.0.0.1 И измените порт на 3333

работал отлично.

Ответ 9

Я думаю, что просто перезапустите mysql и apache, которые работают для меня.

Ответ 10

Перезапуск mysql работал у меня:

sudo /etc/init.d/mysql restart