web-dev-qa-db-fra.com

Comment puis-je effacer le cache Rails après le déploiement sur heroku?

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.

35
kikiki.blue

Rails a une tâche de râteau intégrée:

rake tmp:clear
42
gabeodess

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.

37
a.ross.cohen

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
30
Ivar

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

13
nthj

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

5
rvirani
0

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.

0
Jonathan Mui