【发布时间】:2019-05-05 21:12:03
【问题描述】:
我无法刷新 Laravel 缓存,我认为问题可能与使用多个运行 Laravel 堆栈的 Docker 容器有关。我试过php artisan cache:clear 和php artisan config:cache。我已经删除了bootstrap/cache/config.php,但文件只是以旧配置重新出现,就像一些不死生物困扰着我一样。
我能够刷新缓存的唯一方法是使用 docker-compose down 完全删除容器,然后再次运行容器。
在下面的 docker-compose 中,您可以看到我的应用程序、队列和调度程序容器都运行 Laravel 堆栈,代码库从主机安装。这会导致问题吗?
docker-compose.yml
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app
restart: unless-stopped
tty: true
env_file: '.env'
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
#APP_ENV: local
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
- ./php/opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
networks:
- app-network
scheduler:
image: digitalocean.com/php
container_name: scheduler
restart: unless-stopped
depends_on:
- app
volumes:
- .:/var/www
env_file: '.env'
environment:
CONTAINER_ROLE: scheduler
networks:
- app-network
queue:
image: digitalocean.com/php
container_name: queue
restart: unless-stopped
depends_on:
- app
volumes:
- .:/var/www
- ./supervisor/supervisord.conf:/etc/supervisor/supervisord.conf
- ./supervisor/conf.d:/etc/supervisor/conf.d
env_file: '.env'
environment:
CONTAINER_ROLE: queue
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "${local_ip}:${host_web_port}:80"
#- "${local_ip}:443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.26
container_name: db
restart: unless-stopped
tty: true
ports:
- "${local_ip}:${host_db_port}:3306"
environment:
MYSQL_DATABASE: dbname
MYSQL_USER: laravel
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: root_password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
谁能告诉我如何在不破坏容器的情况下重新加载缓存?
为了完整起见,我使用本指南设置 Docker 环境:https://www.digitalocean.com/community/tutorials/how-to-set-up-laravel-nginx-and-mysql-with-docker-compose
我正在使用本指南运行队列和调度程序容器:https://laravel-news.com/laravel-scheduler-queue-docker。但是我已经修改了队列以运行主管。
start.sh
#!/usr/bin/env bash
set -e
role=${CONTAINER_ROLE:-app}
env=${APP_ENV:-production}
if [ "$env" != "local" ]; then
echo "Caching configuration..."
(php artisan config:cache && php artisan view:cache) # && php artisan route:cache - can't cache route closures
fi
if [ "$role" = "app" ]; then
exec php-fpm
elif [ "$role" = "queue" ]; then
echo "Running the queue..."
/usr/bin/supervisord
elif [ "$role" = "scheduler" ]; then
while [ true ]
do
php artisan schedule:run --verbose --no-interaction &
sleep 60
done
else
echo "Could not match the container role \"$role\""
exit 1
fi
【问题讨论】:
-
您是否也尝试过
php artisan optimize:clear? -
我没有尝试过,因为我有一些使用闭包的路由,这会破坏
php artisan optimize。但是为了尝试一切,我将用控制器替换闭包并稍后尝试。