Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clear media cache command #1274

Merged
merged 2 commits into from
Aug 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 54 additions & 44 deletions .ddev/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,17 @@ xdebug_enabled: false
additional_hostnames: []
additional_fqdns: []
database:
type: mariadb
version: "10.3"
nfs_mount_enabled: false
mutagen_enabled: false
type: mariadb
version: "10.3"
hooks:
post-start:
- composer: install
- exec: bash .ddev/hook_01_setup.sh
post-start:
- composer: install
- exec: bash .ddev/hook_01_setup.sh
use_dns_when_possible: true
composer_version: 2.2.17
web_environment:
- MAGERUN_SETUP_TEST_DEFAULT_MAGENTO_VERSION=2.4.6
- MAGERUN_SETUP_TEST_DEFAULT_MAGENTO_VERSION=2.4.6
- N98_MAGERUN2_BIN=/var/www/html/bin/n98-magerun2
nodejs_version: "16"

# Key features of ddev's config.yaml:
Expand All @@ -32,7 +31,7 @@ nodejs_version: "16"

# docroot: <relative_path> # Relative path to the directory containing index.php.

# php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1"
# php_version: "8.1" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1", "8.2"

# You can explicitly specify the webimage but this
# is not recommended, as the images are often closely tied to ddev's' behavior,
Expand All @@ -41,13 +40,13 @@ nodejs_version: "16"
# webimage: <docker_image> # nginx/php docker image.

# database:
# type: <dbtype> # mysql, mariadb
# version: <version> # database version, like "10.3" or "8.0"
# Note that mariadb_version or mysql_version from v1.18 and earlier
# will automatically be converted to this notation with just a "ddev config --auto"
# type: <dbtype> # mysql, mariadb, postgres
# version: <version> # database version, like "10.4" or "8.0"
# mariadb versions can be 5.5-10.8 and 10.11, mysql versions can be 5.5-8.0
# postgres versions can be 9-15.

# router_http_port: <port> # Port to be used for http (defaults to port 80)
# router_https_port: <port> # Port for https (defaults to 443)
# router_http_port: <port> # Port to be used for http (defaults to global configuration, usually 80)
# router_https_port: <port> # Port for https (defaults to global configuration, usually 443)

# xdebug_enabled: false # Set to true to enable xdebug and "ddev start" or "ddev restart"
# Note that for most people the commands
Expand All @@ -59,7 +58,7 @@ nodejs_version: "16"
# "ddev xhprof" to enable xhprof and "ddev xhprof off" to disable it work better,
# as leaving xhprof enabled all the time is a big performance hit.

# webserver_type: nginx-fpm # or apache-fpm
# webserver_type: nginx-fpm, apache-fpm, or nginx-gunicorn

# timezone: Europe/Berlin
# This is the timezone used in the containers and by PHP;
Expand All @@ -75,15 +74,16 @@ nodejs_version: "16"
# composer_version: "2"
# You can set it to "" or "2" (default) for Composer v2 or "1" for Composer v1
# to use the latest major version available at the time your container is built.
# It is also possible to select a minor version for example "2.2" which will
# install the latest release of that branch. Alternatively, an explicit Composer
# version may be specified, for example "1.0.22". Finally, it is also possible
# to use one of the key words "stable", "preview" or "snapshot" see Composer
# documentation.
# It is also possible to use each other Composer version channel. This includes:
# - 2.2 (latest Composer LTS version)
# - stable
# - preview
# - snapshot
# Alternatively, an explicit Composer version may be specified, for example "2.2.18".
# To reinstall Composer after the image was built, run "ddev debug refresh".

# nodejs_version: "16"
# change from the default system Node.js version to another supported version, like 12, 14, 17, 18.
# nodejs_version: "18"
# change from the default system Node.js version to another supported version, like 14, 16, 18, 20.
# Note that you can use 'ddev nvm' or nvm inside the web container to provide nearly any
# Node.js version, including v6, etc.

Expand All @@ -99,10 +99,19 @@ nodejs_version: "16"
# would provide http and https URLs for "example.com" and "sub1.example.com"
# Please take care with this because it can cause great confusion.

# upload_dir: custom/upload/dir
# would set the destination path for ddev import-files to <docroot>/custom/upload/dir
# upload_dirs: "custom/upload/dir"
#
# upload_dirs:
# - custom/upload/dir
# - ../private
#
# would set the destination paths for ddev import-files to <docroot>/custom/upload/dir
# When mutagen is enabled this path is bind-mounted so that all the files
# in the upload_dir don't have to be synced into mutagen
# in the upload_dirs don't have to be synced into mutagen.

# disable_upload_dirs_warning: false
# If true, turns off the normal warning that says
# "You have Mutagen enabled and your 'php' project type doesn't have upload_dirs set"

# working_dir:
# web: /var/www/html
Expand All @@ -118,13 +127,18 @@ nodejs_version: "16"
# database container will be unusable. In the global configuration it is also
# possible to omit ddev-router, but not here.

# nfs_mount_enabled: false
# Great performance improvement but requires host configuration first.
# See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container

# mutagen_enabled: false
# Performance improvement using mutagen asynchronous updates.
# See https://ddev.readthedocs.io/en/latest/users/performance/#using-mutagen
# performance_mode: "global"
# DDEV offers performance optimization strategies to improve the filesystem
# performance depending on your host system. Should be configured globally.
#
# If set, will override the global config. Possible values are:
# - "global": uses the value from the global config.
# - "none": disables performance optimization for this project.
# - "mutagen": enables Mutagen for this project.
# - "nfs": enables NFS for this project.
#
# See https://ddev.readthedocs.io/en/latest/users/install/performance/#nfs
# See https://ddev.readthedocs.io/en/latest/users/install/performance/#mutagen

# fail_on_hook_fail: False
# Decide whether 'ddev start' should be interrupted by a failing hook
Expand All @@ -145,14 +159,6 @@ nodejs_version: "16"
# The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic
# unless explicitly specified.

# phpmyadmin_port: "8036"
# phpmyadmin_https_port: "8037"
# The PHPMyAdmin ports can be changed from the default 8036 and 8037

# host_phpmyadmin_port: "8036"
# The phpmyadmin (dba) port is not normally bound on the host at all, instead being routed
# through ddev-router, but it can be specified and bound.

# mailhog_port: "8025"
# mailhog_https_port: "8026"
# The MailHog ports can be changed from the default 8025 and 8026
Expand Down Expand Up @@ -181,7 +187,7 @@ nodejs_version: "16"

# ngrok_args: --basic-auth username:pass1234
# Provide extra flags to the "ngrok http" command, see
# https://ngrok.com/docs#http or run "ngrok http -h"
# https://ngrok.com/docs/ngrok-agent/config or run "ngrok http -h"

# disable_settings_management: false
# If true, ddev will not create CMS-specific settings files like
Expand Down Expand Up @@ -219,12 +225,16 @@ nodejs_version: "16"
# https_port: 4000
# http_port: 3999
# Allows a set of extra ports to be exposed via ddev-router
# Fill in all three fields even if you don’t intend to use the https_port!
# If you don’t add https_port, then it defaults to 0 and ddev-router will fail to start.
#
# The port behavior on the ddev-webserver must be arranged separately, for example
# using web_extra_daemons.
# For example, with a web app on port 3000 inside the container, this config would
# expose that web app on https://<project>.ddev.site:9999 and http://<project>.ddev.site:9998
# web_extra_exposed_ports:
# - container_port: 3000
# - name: myapp
# container_port: 3000
# http_port: 9998
# https_port: 9999

Expand All @@ -244,7 +254,7 @@ nodejs_version: "16"
# However, with "override_config: true" in a particular config.*.yaml file,
# 'nfs_mount_enabled: false' can override the existing values, and
# hooks:
# post_start: []
# post-start: []
# or
# web_environment: []
# or
Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,15 @@ Some entries are encrypted and can be decrypted with `--decrypt` option.
The command uses the core cache by default.
If the FPC cache should be used, the `--fpc` option can be used.

### Flush Catalog Images Cache

Removes pre-generated catalog images and triggers `clean_catalog_images_cache_after` event which
should invalidate the full page cache.

```sh
n98-magerun2.phar cache:catalog:image:flush
```

---

If no code is specified, all cache types will be enabled. Run
Expand Down
1 change: 1 addition & 0 deletions config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ commands:
- N98\Magento\Command\Admin\User\ChangePasswordCommand
- N98\Magento\Command\Admin\User\ChangeStatusCommand
- N98\Magento\Command\Admin\Token\CreateCommand
- N98\Magento\Command\Cache\CatalogImageFlushCommand
- N98\Magento\Command\Cache\CleanCommand
- N98\Magento\Command\Cache\DisableCommand
- N98\Magento\Command\Cache\EnableCommand
Expand Down
61 changes: 61 additions & 0 deletions src/N98/Magento/Command/Cache/CatalogImageFlushCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

declare(strict_types=1);

namespace N98\Magento\Command\Cache;

use Magento\Catalog\Model\Product\Image;
use Magento\Framework\Event\ManagerInterface;
use Magento\Framework\Exception\FileSystemException;
use N98\Magento\Command\AbstractMagentoCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class CatalogImageFlushCommand extends AbstractMagentoCommand
{
private Image $imageModel;

protected function configure()
{
$this
->setName('cache:catalog:image:flush')
->addOption(
'suppress-event',
null,
InputOption::VALUE_NONE,
'Suppress clean_catalog_images_cache_after event dispatching'
)
->setDescription('Flush catalog image cache')
;
}

public function inject(
Image $imageModel
) {
$this->imageModel = $imageModel;
}

/**
* @param InputInterface $input
* @param OutputInterface $output
* @return int
* @throws FileSystemException
*/
public function execute(InputInterface $input, OutputInterface $output): int
{
$this->initMagento();

$this->imageModel->clearCache();
$output->writeln('<info>Catalog image cache flushed</info>');

if ($input->getOption('suppress-event')) {
return self::SUCCESS;
}

$eventManager = $this->getObjectManager()->get(ManagerInterface::class);
$eventManager->dispatch('clean_catalog_images_cache_after');

return self::SUCCESS;
}
}
10 changes: 10 additions & 0 deletions tests/bats/functional_magerun_commands.bats
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ function cleanup_files_in_magento() {
assert_output --partial "username"
}

@test "Command: cache:catalog:image:flush" {
run $BIN "cache:catalog:image:flush"
assert_output --partial "Catalog image cache flushed"
assert [ "$status" -eq 0 ]

run $BIN "cache:catalog:image:flush" --suppress-event
assert_output --partial "Catalog image cache flushed"
assert [ "$status" -eq 0 ]
}

@test "Command: cache:clean" {
run $BIN "cache:clean" "layout"
assert_output --partial "cleaned"
Expand Down
Loading