0

I am deploying a symfony application to an Azure Linux PHP 7.4 web app. I used the approach suggested in How to archive files in artifact for github workflow actions in order to fix this warning? to streamline the deployment.

So everything is working well, but occasionally the site fails. I tracked it down to a stale cache. To fix the problem I have to SSH into the web app and clear the cache using

$ php bin/console cache:clear

Looking in detail at the Github actions build and deploy log, I see that cache:clear is executed on the build VM, which is not helpful.

I am using the standard php build and deploy script with the zip/unzip steps added...

# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
# More GitHub Actions for Azure: https://github.com/Azure/actions

name: Build and deploy PHP app to Azure Web App - xxx

on:
  push:
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '7.4'

      - name: Check if composer.json exists
        id: check_files
        uses: andstor/file-existence-action@v1
        with:
          files: 'composer.json'

      - name: Run composer install if composer.json exists
        if: steps.check_files.outputs.files_exists == 'true'
        run: composer validate --no-check-publish && composer install --prefer-dist --no-progress

      - name: Zip artifact for deployment
        run: zip -r release.zip * .env .htaccess public/.htaccess

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: php-app
          path: release.zip

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'staging'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: php-app

      - name: Unzip artifact for deployment
        run: unzip release.zip
        
      - name: 'Deploy to Azure Web App'
        uses: azure/webapps-deploy@v2
        id: deploy-to-webapp
        with:
          app-name: 'xxxx'
          slot-name: 'staging'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_xxxxx }}
          package: .

How do I get the clear cache command to work after deployment to the web app?

AQuirky
  • 4,691
  • 2
  • 32
  • 51
  • 2
    Does this answer your question? [Clear cache in GitHub Actions](https://stackoverflow.com/questions/63521430/clear-cache-in-github-actions) – Ecstasy Jan 31 '22 at 04:35
  • You can refer to similar issues: [app/console cache:clear problem](https://github.com/symfony/symfony/issues/19851) and [php bin/console cache:clear on production](https://github.com/symfony/symfony/discussions/44864) – Ecstasy Jan 31 '22 at 04:36
  • @DeepDave-MT No...none of these answers work. I know how to clear the cache. I have to SSH in and clear it manually to get things to work. What I want is a way to clear the cache after deployment. What is happening now is the cache is being cleared on the build machine. – AQuirky Feb 01 '22 at 19:33

2 Answers2

0

Right...

It turns out the way to clear the cache is very simple. Use the cache clear command as the "startup command"

Azure webapp configuration

So I deploy and SSH into the web app and check /home/site/wwwroot/var/cache/staging and voila! all the file are newly created!

This has occurred to me at the beginning, but it really seemed like a kluge. I really wanted a cleaner way to do this. I tried adding the startup command to the deployment script but got this error...

GitHub actions error

So I cannot add startup command because there is a publish profile.

So why did such a simple problem take so long to answer on SO? More than one suggested answers that were completely irrelevant. All these answers had in common with my issue were words like "cache" and "php".

AQuirky
  • 4,691
  • 2
  • 32
  • 51
-1

Based on the above problem statement, we understood that you are looking to clear the web app cache post the deployment.

In order to achieve this, you can add an app settings WEBSITE_LOCAL_CACHE_OPTION=Always which help you in clearing the local cache of the web app.

for any App Service, its related contents (code files, resources etc.) are being hosted in a Shared Content Folder in order to provision all the features of the App Service like Load Balancing etc. So, if there are 2 VMs configure for Load Balancing then there would just one shared location where all the content of the App Service is hosted.

When these Web Apps refer to the Content Folder, there might be chances of Latency issues (although, Azure takes care of most of these issues) which might slow down the performance of the websites a bit. In such Performance-critical application, we can leverage the features of “Azure App Service Local Cache”.

For more information, you refer to this Azure documentation on Azure App Service Local Cache & this blog post as well .

VenkateshDodda
  • 4,723
  • 1
  • 3
  • 12
  • Yes, you understand the problem correctly. However I could not get your solution to work. I defined WEBSITE_LOCAL_CACHE_OPTION=Always for the web app and restarted. I SSH into the web app and the cache is still filled with old crap. Keep in mind the cache I am talking about is /home/site/wwwroot/var/cache. – AQuirky Feb 04 '22 at 22:35