33 votes

Effacer Memcached sur Heroku Deploy

Quel est le meilleur moyen d'effacer automatiquement Memcached lorsque je déploie mon application rails sur Heroku?

Je mets en cache la page d'accueil et lorsque je modifie et redéploie la page, elle est servie à partir du cache et les mises à jour ne sont pas incorporées.

Je veux que cela soit totalement automatisé. Je ne souhaite pas vider le cache de la console heroku à chaque fois que je déploie.

Merci!

32voto

Fabrice Carrega Points 409

Je déploie mes applications à l'aide d'un script bash qui permet d'automatiser GitHub & push Heroku, migration de base de données, maintenance de l'application du mode d'activation et de mise en cache de compensation de l'action.

Dans ce script, la commande pour effacer le cache est :

heroku run --app YOUR_APP_NAME rails runner -e production Rails.cache.clear

Cela fonctionne avec Céladon Cèdre avec le Heroku Toolbelt paquet. Je sais que ce n'est pas un Râteau à base de solution cependant, il est tout à fait efficace.

Remarque : assurez-vous de définir l' environment / -e option de l' runner commande production qu'il sera exécuté sur l' development , autrement.

23voto

Hollownest Points 719

[Sur la pile de cèdre Céladon]

- [Mise à jour du 18 juin 2012 - cela ne fonctionne plus, on verra si je peux trouver une autre solution de contournement]

Le moyen le plus simple que j'ai trouvé pour gérer ces points d'ancrage post-déploiement consiste à verrouiller sur la tâche actifs: précompilation déjà appelée lors de la compilation de slug. Avec un clin d'œil à asset_sync Gem pour l'idée:

 Rake::Task["assets:precompile"].enhance do
  # How to invoke a task that exists elsewhere
  # Rake::Task["assets:environment"].invoke if Rake::Task.task_defined?("assets:environment")

  # Clear cache on deploy
  print "Clearing the rails memcached cache\n"
  Rails.cache.clear
end
 

Je viens de mettre cela dans un fichier lib / tasks / heroku_deploy.rake et il est bien ramassé.

8voto

Solomon Points 1327

Ce que j'ai fini par créer, c'est créer une nouvelle tâche de travail qui a été déployée sur heroku puis effacé le cache. J'ai créé un fichier deploy.rake et le voici:

 namespace :deploy do

    task :production do
        puts "deploying to production"
        system "git push heroku"
        puts "clearing cache"
        system "heroku console Rails.cache.clear"
        puts "done"
    end

end
 

Maintenant, au lieu de taper git push heroku, je tape simplement rake deploy: production.

7voto

Mike Points 3544

25 janvier 2013: cela fonctionne pour une application Rails 3.2.11 fonctionnant sur Ruby 1.9.3 sur Cedar

Dans votre Gemfile ajoutez la ligne suivante pour forcer Ruby 1.9.3:

 ruby '1.9.3'
 

Créez un fichier nommé lib/tasks/clear_cache.rake avec ce contenu:

 if Rake::Task.task_defined?("assets:precompile:nondigest")
  Rake::Task["assets:precompile:nondigest"].enhance do
    Rails.cache.clear
  end
else
  Rake::Task["assets:precompile"].enhance do
    # rails 3.1.1 will clear out Rails.application.config if the env vars
    # RAILS_GROUP and RAILS_ENV are not defined. We need to reload the
    # assets environment in this case.
    # Rake::Task["assets:environment"].invoke if Rake::Task.task_defined?("assets:environment")
    Rails.cache.clear
  end
end
 

Enfin, je vous recommande également d'exécuter heroku labs:enable user-env-compile sur votre application afin que son environnement soit disponible dans le cadre de la précompilation.

2voto

John Beynon Points 23163

En plus de tout ce que vous pouvez faire dans votre application qui s'exécute au «démarrage de l'application», vous pouvez utiliser les points d'ancrage heroku deploy (http://devcenter.heroku.com/articles/deploy-hooks#http_post_hook) qui atteindraient une URL dans votre application. qui efface le cache

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X