运行Symfony命令时无法加载PHP类

时间:2018-08-07 06:59:07

标签: php symfony docker rabbitmq amqp

如果能解决以下问题,我将不胜感激。

我已经将Symfony Messenger设置为使用AMQP和RabbitMQ。我可以在项目中调度消息并使用AMQPConnection。

但是当我尝试使用该消息时,我得到了以下提示:

    $   php bin/console messenger:consume-messages amqp

        Attempted to load class "AMQPConnection" from the global namespace.
        Did you forget a "use" statement for "PhpAmqpLib\Connection\AMQPConnection"?

控制台命令调用AmqpFactory.php内的方法

    public function createConnection(array $credentials): \AMQPConnection
    {
        return new \AMQPConnection($credentials);
    }

因此,当我从浏览器运行项目时,一切正常。我可以使用AMQPConnection等。但是从终端运行时,找不到AMQPConnection类。

在我的composer.json中,我还安装了amqplib

    "php-amqplib/php-amqplib": "^2.7",

我使用Docker,并且Dockerfile包含:

    FROM php:7-apache

    RUN usermod -u 1000 www-data &&\
        a2dissite 000-default &&\
        apt-get update &&\
        apt-get install -y \
            zlib1g-dev \
            libicu-dev \
            g++ \
            libfreetype6-dev \
            libssh-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            librabbitmq-dev \
            libpng-dev &&\
        docker-php-ext-configure intl &&\
        docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ &&\
        docker-php-ext-install -j$(nproc) gd pdo_mysql intl opcache zip pcntl exif bcmath sockets &&\
        a2enmod rewrite

    RUN pecl install amqp \
        && docker-php-ext-enable amqp

    COPY docker/apache2.conf /etc/apache2/apache2.conf

    WORKDIR /var/www/project

更新! 我已经打印了phpinfo(),在分发消息时,我的版本是7.2.8,在执行终端命令时,我的版本是7.2.7。因此,终端在执行命令时未使用PHP的Docker实例。

3 个答案:

答案 0 :(得分:2)

使用Docker时,需要在所需的容器内执行Symfony命令。

问题来自尝试从本地主机执行php:

$ php bin/console messenger:consume-messages amqp

本地主机没有具有必要的依赖性,在这种情况下为RabbitMQ

相反,应使用正确的容器运行命令:

$ docker exec -ti container_name sh -c "cd /var/www/project/ && php  bin/console messenger:consume-messages amqp"

container_name是具有RabbitMQ依赖项的容器的名称。

答案 1 :(得分:0)

终于解决了这个问题。我不知道我必须通过Docker来运行此命令。这适用于med:

docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"

答案 2 :(得分:0)

您在Docker容器中缺少软件包librabbitmq4。将RUN apt-get update --fix-missing && apt-get update && apt-get install php-amqp添加到您的Dockerfile并重建映像。