当 运行 Symfony 命令时无法加载 PHP class
Cannot load PHP class when running Symfony command
对于以下问题,我将不胜感激。
我已经将 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 和所有。但是当从终端 运行ning 时,它找不到 AMQPConnection class.
在我的 composer.json 我也安装了 amqplib
"php-amqplib/php-amqplib": "^2.7",
我使用 Docker 并且 Docker 文件包含:
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 实例。
终于解决了这个问题。我不知道我必须通过 Docker 到 运行 这个命令。这对我有用:
docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"
您的 Docker 容器中缺少包 librabbitmq4
。将 RUN apt-get update --fix-missing && apt-get update && apt-get install php-amqp
添加到您的 Docker 文件并重建映像。
使用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
依赖项的容器的名称。
对于以下问题,我将不胜感激。
我已经将 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 和所有。但是当从终端 运行ning 时,它找不到 AMQPConnection class.
在我的 composer.json 我也安装了 amqplib
"php-amqplib/php-amqplib": "^2.7",
我使用 Docker 并且 Docker 文件包含:
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 实例。
终于解决了这个问题。我不知道我必须通过 Docker 到 运行 这个命令。这对我有用:
docker exec -ti container_name sh -c "cd /var/www/project/ && php bin/console messenger:consume-messages amqp"
您的 Docker 容器中缺少包 librabbitmq4
。将 RUN apt-get update --fix-missing && apt-get update && apt-get install php-amqp
添加到您的 Docker 文件并重建映像。
使用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
依赖项的容器的名称。