Quelle est la meilleure façon de nettoyer le cache sans l'exécution de la commande de la console?
Dans le panneau d'admin de mon projet, j'ai programmé la possibilité de changer le nom de base de données à utiliser. J'ai écrit le nouveau nom de base de données dans le parameters.ini
, et après que le cache a dû être nettoyé pour charger la nouvelle configuration.
Quelle est la meilleure façon de nettoyer le cache sans l'exécution de la commande de la console?
Ou est-il une autre bonne pratique comment changer le db.
OriginalL'auteur Johni | 2012-05-30
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la console de commande via
exec()
:Ou tout simplement vider le cache/ dossier si vous ne souhaitez pas utiliser la console de commande.
Qu'entendez-vous par un échauffement?
Le comportement, la console de commande (prefilling le cache).
Ok, comment ne pouvez-vous pas exécuter?
Ensuite, exécutez la Symfony2 commande.
exec()
va arrêter le script de l'exécution jusqu'à ce que la commande est terminée.OriginalL'auteur Samy Dindane
Vous pouvez appeler cette action effacer une mémoire cache:
Pouvez-vous fournir le contexte de ce fichier que vous voulez mettre cette fonction? Et avez-vous besoin d'ajouter un itinéraire personnalisé dans votre propre config/routing.fichier yml ou ne l'annotation comme par magie?
L'annotation fourni a donné une erreur (quelque chose sur le manque de "l'usage" de l'énoncé), donc je suis sûr que je ne comprends pas comment cela fonctionne, et que certaines d'espace de noms doit être référencé dans l'en-tête @Route. Mais quand j'ai ajouté cette fonction à son propre contrôleur et créé mon propre itinéraire, cela a fonctionné. Merci. (y)
L'espace de noms nécessaire est
Symfony\Component\Routing\Annotation\Route
. Le mettre dans une déclaration d'utilisation sous le contrôleur de la déclaration d'espace de noms.Pour effacer la prod env vous devez remplacer $this->get('noyau') par de nouvelles \AppKernel('prod', false) (désolé pour le up) mais j'ai aussi posté une réponse un peu plus propre que celui-ci
OriginalL'auteur Pacufist
Plus récente de la meilleure façon (2017). Je suis la création de ce contrôleur:
--no-debug
drapeau)Je pense que j'ai injecté un service de conteneurs dans le script que j'ai utilisé.
J'ai regardé dans le CacheClearCommand.php dossier et constaté que la commande n'est pas réellement à l'aide de l' --env paramètre, il est en fait en utilisant le noyau actuel pour obtenir le dossier cache et tout ce que vous devez faire pour effacer la prod cache serait d'ajouter ceci : $this->container->set('noyau', new \AppKernel($env, true)); pour le code, je vais modifier la réponse avec la correction
OriginalL'auteur HelpNeeder
Mon travail d'action avec le rendu de
Success
page. Il vider le cache à l'arrêt.Note, vous perdez les sessions si vous n'avez pas configuré
session:
dans la configuration.yml.cache:clear --no-warmup
, car il ne supprime le cache, mais ne pas le réchauffer.OriginalL'auteur PLoginoff
@HelpNeeder la réponse est bonne, mais le ClearCache commande n'est pas à l'aide de l' --env option donnée. C'est au lieu d'utiliser le noyau de l'application est en cours d'exécution sur.
Donc pour que cela fonctionne avec un autre environnement que l'environnement vous appelez le contrôleur, vous avez besoin de modifier un peu le code (je ne peux pas modifier sa réponse, c'est à dire le modifier la file d'attente est pleine) voici donc une réponse plus complète:
Vous devez ensuite configurer les routes :
Et vous pouvez maintenant afficher le résultat de la commande à l'aide de {{ sortie }} dans le template twig.
Si vous avez un contrôle d'accès, n'oubliez pas de définir les autorisations pour cette route à une SUPER_ADMIN ou quelque chose, vous ne voudriez pas que quelqu'un d'autre que un admin en mesure de vider le cache.
OriginalL'auteur Tofandel
je suis effacer la mémoire cache de cette façon:
https://gist.github.com/basdek/5501165
Failed to remove directory "/var/www/app/var/cache/prod": rmdir(/var/www/app/var/cache/prod): Directory not empty.
de sorte qu'il ne ressemble pas à une bonne option pour moi. De multiples processus sont à l'aide du répertoire en parallèle de sorte que vous ne pouvez pas le supprimer.OriginalL'auteur Stan Fad
Bien que sa réponse est plus ou moins obsolète, sa recommandation est encore utile aujourd'hui:
Donc à la suite de sa recommandation, j'ai écrit une fonction qui fait exactement cela:
où
delTree($dir_name)
pourrait être n'importe quelle fonction qui supprime récursivement un répertoire de l'arborescence. Il suffit de cocher le PHPrmdir
fonction de la Contribution d'Utilisateur Notes, il ya beaucoup de suggestions.OriginalL'auteur Eugen Mihailescu