J'ai appliqué le cache à mon heroku Rails app et cela fonctionne bien. Mais chaque fois que je déploie sur heroku, je veux également vider le cache automatiquement.
alors j'ai googlé et j'ai trouvé ça.
task :after_deploy, :env, :branch do |t, args|
puts "Deployment Complete"
puts "Cleaning all cache...."
FileUtils.cd Rails.root do
sh %{heroku run console}
sh %{Rails.cache.clear}
end
end
mais quand j'ai ratissé ce script, il montre juste la ligne de commande de la console heroku mais la commande Rails.cache.clear ne tape pas. (Je suppose que c'est parce que la console Heroku est interactive)
et
system "heroku console Rails.cache.clear"
ne fonctionne pas pour les applications en cèdre.
Comment puis-je résoudre ce problème?
Merci.
Rails a une tâche de râteau intégrée:
rake tmp:clear
Les éléments suivants devraient fonctionner sur le cèdre:
heroku run console
.. puis attendez 5 secondes pour que la console Heroku démarre
Rails.cache.clear
Ensuite, vous devriez voir le cache vide et vous pouvez quitter la console. N'oubliez pas que vous devrez peut-être actualiser plusieurs fois, car votre ordinateur local mettra souvent en cache les actifs et autres éléments de votre navigateur jusqu'à ce qu'il fasse une nouvelle demande.
S'il se trouve que ce sont des actifs que vous mettez en cache, vous n'avez pas besoin de passer par un effacement manuel à chaque fois que vous poussez, il vous suffit de configurer le pipeline d'actifs et de vous assurer que tous vos js/css (moins/sass)/les images statiques sont compilées avec des hachages à la fin de leurs noms de fichiers.
Vous devriez pouvoir créer une tâche de rake d'effacement du cache qui ressemble à ceci:
namespace :cache do
desc "Clears Rails cache"
task :clear => :environment do
Rails.cache.clear
end
end
et l'invoquer directement dans une commande que vous pouvez utiliser dans votre hook post-déploiement - comme ceci:
heroku run rake cache:clear
Ruby on Rails a une variable ENV magique appelée 'Rails_CACHE_ID'. Je la mets à l'ID de validation git chaque fois que je déploie: heroku config:set Rails_CACHE_ID=$CIRCLE_SHA1
Si vous souhaitez simplement exécuter une tâche de râteau après le déploiement, je vous recommande de vérifier:
https://github.com/gunpowderlabs/buildpack-Ruby-rake-deploy-tasks
Nous l'utilisons en production depuis plus de 6 mois et il est solide comme le roc.
Tout d'abord, ajoutez le buildpack APRÈS avoir déjà le Ruby buildpack set. Cela devrait se produire après votre premier déploiement sur le serveur
heroku buildpacks:add https://github.com/gunpowderlabs/buildpack-Ruby-rake-deploy-tasks
Ensuite, définissez une variable d'environnement appelée DEPLOY_TASKS
avec juste les noms des tâches de râteau que vous voulez exécuter séparés par des espaces.
heroku config:set DEPLOY_TASKS='cache:clear
heroku run rake tmp: cache: clear
Heroku ne prend actuellement pas en charge un pipeline d'actions à effectuer après le déploiement. Vous aurez besoin de quelque chose comme Codeship ou TravisCI pour créer une recette d'étapes qui se produisent pendant le déploiement
Divulgation: je suis un client de Codeship.