68 votes

Redémarrer mon application heroku automatiquement

Cette commande de terminal redémarre mon application heroku :

heroku restart

Existe-t-il un moyen d'exécuter un script qui lancera cette commande et redémarrera mon application toutes les heures ?

0 votes

J'ai besoin de la même chose. Ma raison est que je mets à jour les traductions I18n sur cron, et que je dois redémarrer l'application pour vider le cache I18n.

0 votes

@Oded vous devriez choisir une réponse, s'il vous plaît, afin que les gens ne continuent pas à voir ceci dans leurs flux de "sans réponse". Merci !

6voto

Matthew O'Riordan Points 2779

J'ai résolu ce problème avec une commande curl très simple script au sein du repo qui est déclenchée à l'aide de la commande planificateur Heroku gratuit .

#!/bin/sh curl -X DELETE "https://api.heroku.com/apps/${HEROKU_APP_NAME}/dynos" \ --user "${HEROKU_CLI_USER}:${HEROKU_CLI_TOKEN}" \ -H "Content-Type: application/json" \ -H "Accept: application/vnd.heroku+json; version=3"

Ver https://gist.github.com/mattheworiordan/f052b7693aacd025f025537418fa5708 .

0 votes

$ heroku apps donne une liste de noms d'applications disponibles qui pourraient être utilisées comme ${HEROKU_APP_NAME} . ${HEROKU_CLI_USER} y ${HEROKU_CLI_TOKEN} peut être trouvé à partir de $ heroku auth .

0voto

Mike Jarema Points 528

Nous avons donné à notre application un jeton de longue durée à utiliser pour s'authentifier auprès de l'API Heroku, et avons simplement inclus une requête curl dans notre code pour redémarrer l'application.

Créez un jeton d'API à long terme :

$ heroku authorizations:create --description="Long-lived token for app restarts"
Creating OAuth Authorization... done
Client:      <none>
ID:          abcdabcd-abcd-4bcd-abcd-abcdabcdabcd
Description: Long-lived token for app restarts
Scope:       global
Token:       12341234-1234-4234-1234-123412341234
Updated at:  Tue May 11 2021 09:16:38 GMT-0400 (Eastern Daylight Time) (less than a minute ago)

Notez le Token . Nous l'avons stocké dans l'ENV via heroku config, avec le nom de l'application :

$ heroku config:set HEROKU_API_TOKEN=12341234-1234-4234-1234-123412341234 HEROKU_APP_NAME=not-really-an-app

Dans notre code, nous avons la méthode suivante pour redémarrer l'application via l'API de Heroku, en utilisant cet appel API :

def restart!
  # Using puts to log output, replace with your logging system if needed
  puts `curl -v -s -n -X DELETE https://api.heroku.com/apps/#{ENV["HEROKU_APP_NAME"]}/dynos -H "Content-Type: application/json" -H "Accept: application/vnd.heroku+json; version=3" -H "Authorization: Bearer #{ENV["HEROKU_API_TOKEN"]}"`
end

Enfin, comme vous êtes intéressé par des redémarrages automatiques toutes les heures, l'option restart! ci-dessus peut être programmée en utilisant Le planificateur de Heroku , rufus-scheduler en tant que Travail de Sidekiq ou autre.

Note : Heroku a certaines limites/logiques de temporisation autour des redémarrages d'applications, principalement centrées sur les crashs de dyno. Lecture de les docs peut vous aider à définir votre stratégie de redémarrage de l'application.

-1voto

Eric Marchese Points 109

Pour autant que je sache, le simple fait de lancer heroku ps:restart --app APPNAME dans le module complémentaire Heroku Scheduler fonctionne bien. Je ne comprends pas pourquoi les étapes supplémentaires dans les autres réponses sont nécessaires.

1 votes

Je viens d'essayer et il n'y a pas eu de redémarrage sur le dyno. Le journal Heroku pour le planificateur suggère que la commande a échoué. Il n'y a pas de binaire "heroku" sur les dynos. Vous pouvez l'essayer en faisant heroku run bash dans un terminal et ensuite essayer d'exécuter des commandes heroku. Peut-être avez-vous un buildpack spécial, ou êtes-vous sur une pile spéciale ? Je suis sur cedar-14.

1 votes

Désolé pour la réponse tardive. J'ai quelques applications sur Heroku (toutes sur cedar-14), certaines sont en Ruby et d'autres en Go. Je viens de tester heroku ps:restart --app APPNAME sur mon dyno Ruby avec Heroku Scheduler et ça a marché. J'ai aussi essayé heroku run bash sur ce banc d'essai et a été en mesure d'exécuter heroku les commandes qu'il contient. Je n'utilise pas de buildpacks spéciaux, juste la configuration par défaut pour les applications Rails. J'ai cependant essayé de faire la même chose avec une application Go, et le résultat est le suivant heroku n'était pas disponible. Elle doit donc être incluse dans le buildpack Ruby (et peut-être d'autres) mais pas dans tous.

2 votes

Aha, c'est étrange. Je l'ai essayé dans une application Rails (donc avec un buildpack Ruby - je pense que c'est plus spécifiquement Ruby 2.2.5) et là, j'ai dû ajouter spécifiquement heroku-buildpack-toolbelt.

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