AQuirky
AQuirky

Reputation: 5256

Symfony cache:clear in Azure web app with GitHub Actions

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?

Upvotes: 0

Views: 744

Answers (2)

AQuirky
AQuirky

Reputation: 5256

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".

Upvotes: 0

VenkateshDodda
VenkateshDodda

Reputation: 5526

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 .

Upvotes: -1

Related Questions