我正在將 Symfony 4.4 應用程序部署到 AWS ElasticBeanstalk 并注意到每次部署后都沒有清除緩存。該應用程序運行良好,但陳舊的緩存異常。為了解決緩存問題,我添加了以下文件:/.ebextensions/deploy.configcontainer_commands:
01-clear-cache:
command: php bin/console cache:clear --no-warmup --env=prod這似乎清除了緩存,但后來它以某種方式更改了權限,以便我在嘗試訪問應用程序時收到錯誤。致命錯誤:未捕獲的 RuntimeException:無法寫入緩存目錄 (/var/app/current/var/cache/prod)為什么運行cache:clear會更改權限,有沒有辦法避免這種情況發生,或者至少如何在之后解決,即在同一個/另一個.ebextensions文件中?
2 回答

catspeake
TA貢獻1111條經驗 獲得超0個贊
這些命令由root
用戶運行,如docs中所述。
指定的命令以 root 用戶身份運行,并按名稱按字母順序處理。容器命令從暫存目錄運行,您的源代碼在部署到應用程序服務器之前被提取出來。當源部署到其最終位置時,您使用容器命令對暫存目錄中的源代碼所做的任何更改都將包含在內。
(強調我的)。
重新創建緩存時,新目錄由 擁有root
,如果需要,您的 PHP 進程無法在那里寫入。
執行您的命令,使其使用與 PHP 運行時相同的用戶運行。例如,如果它在www-data
用戶下運行:
container_commands: 01-clear-cache: command: sudo -u webapp php bin/console cache:clear --no-warmup --env=prod

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
使用 Ansible 時,您實際上可以將become: true其用作成為 root 用戶并become_user: xxx成為所需用戶的機制。
例子:
---
# roles/app/tasks/main.yml
- name: Run composer install
become: true
become_user: ubuntu
composer:
command: install
working_dir: "{{ deploy_path }}"
請注意,您必須定義一個名為deploy_path.
- 2 回答
- 0 關注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消