Dans les applications gratuites Heroku, les dynos semblent rester au ralenti - mon application a un trafic très faible, mais il n’est pas non plus vraiment acceptable dans mon cas que mes utilisateurs doivent attendre plus de 20 secondes pour lancer un nouveau dyno.
Franchement, avec ce genre d’attente, beaucoup partiront avant même que la première page ne s’affiche.
Alors, j’ai un problème: devrais-je payer 36 dollars par mois pour économiser chaque utilisateur pendant 20 secondes embarrassantes lorsque mon trafic est à un chiffre par jour.
Y a-t-il un moyen de contourner ceci??
Vous pouvez installer le logiciel gratuit add-on New Relic . Il dispose d'une fonction de surveillance de la disponibilité qui envoie une requête ping à votre site deux fois par minute, empêchant ainsi le dyno de rester inactif.
Plus ou moins la même solution que Jesse mais peut-être plus intégrée à Heroku ... Et avec quelques avantages (le suivi des performances est tout simplement génial).
Remarque: à tous ceux qui disent que cela ne fonctionne pas: la partie importante de ma réponse est "moniteur de disponibilité". Juste installer l'addon ne va pas aider. Vous devez également configurer la surveillance de la disponibilité avec l'URL de votre application heroku.
En guise d'alternative à Pingdom, je suggère d'essayer ptimerobot . Il est gratuit et offre une vérification du site à intervalles de 5 minutes. Cela fonctionne très bien pour moi.
UPDATE du 7 mai 2015: Cela ne sera plus possible, car Heroku changera son dyno gratuit pour ne pas le garder. vivant pendant 24 heures:
Un autre changement important concerne le sommeil dormant ou la "marche au ralenti". Tandis que les applications non payées ont toujours dormi après un délai d’activité, certaines applications ont utilisé des services de ping automatique pour empêcher ce comportement. Les dynos gratuits ont droit à 18 heures de veille par période de 24 heures et, au cours des prochaines semaines, nous commencerons à informer les utilisateurs des applications dépassant cette limite. Avec l'introduction du dyno hobby (7 $ par mois), nous demandons de laisser votre application dormir après une pause ou de passer à cette nouvelle option.
Quand est-ce que ça va être live? Selon leur blog:
Les applications exécutant un seul dyno 1X qui n’accumulent pas d’autres frais de dyno seront migrées progressivement vers le nouveau dynos gratuit à compter du à partir du 1 er juillet .
À mon avis, l'utilisation du niveau "gratuit" du service ne devrait pas alimenter une application de production ou orientée client. Bien que les solutions ci-dessus fonctionnent contre le ralenti Dyno, réfléchissez bien à ce que vous faites.
Sinon, utilisez une tâche cron pour envoyer un ping à votre site et désactivez la vérification des périodes connues de faible utilisation (c.-à-d. Pendant la nuit) pour vous assurer que Heroku ne supprime pas le niveau gratuit pour tous les autres.
Vous pouvez également essayer http://kaffeine.herokuapp.com (créé par moi), il est conçu pour empêcher les applications Heroku de s'endormir. Elle envoie une requête ping à votre application toutes les 10 minutes pour qu'elle ne s'endorme pas. C'est totalement gratuit.
Vous pouvez utiliser http://pingdom.com/ pour vérifier votre application. Si cela est fait toutes les minutes environ, heroku ne ralentira pas votre application et n'aura pas besoin de tourner.
Réponse facile - si vous appréciez le service, payez-le.
Toutes ces "astuces" pour obtenir les avantages d'un service payant… eh bien, c'est essentiellement comme voler un câble. Discutable de même les énumérer ici. Quelle est la suite, des astuces pour pirater des jeux?
Comme une autre affiche ici, j'apprécie le service gratuit de développement et de test et je serai très ennuyé par tous les types à facultés éthiques si Heroku les supprime parce qu'il y a trop de freeloaders. Je ne pense tout simplement pas qu'il était assez direct dans ses critiques.
Testé et travaillant sur ma propre application Heroku en utilisant Node.js 0.10.x le 28/06/201
var http = require('http'); //importing http
function startKeepAlive() {
setInterval(function() {
var options = {
Host: 'your_app_name.herokuapp.com',
port: 80,
path: '/'
};
http.get(options, function(res) {
res.on('data', function(chunk) {
try {
// optional logging... disable after it's working
console.log("HEROKU RESPONSE: " + chunk);
} catch (err) {
console.log(err.message);
}
});
}).on('error', function(err) {
console.log("Error: " + err.message);
});
}, 20 * 60 * 1000); // load every 20 minutes
}
startKeepAlive();
J'utilise l'addon Heroku Scheduler fourni par Heroku gratuitement. Une fois ajouté, il est simple de créer un travail avec 'curl http://yourapp.herokuapp.com ' et un intervalle de 10 minutes.
Dans la documentation Heroku, il est indiqué qu’avoir plus d’un dyno Web ne restera jamais inactif. Peut-être une solution moins chère que 0,09 $/heure comme le suggère Pierre.
J'ai écrit les étapes:
Ajoutez la gem 'newrelic_rpm' à votre Gemfile dans les étapes de mise en scène et de production
➜ installation groupée
➜ Connectez-vous au panneau de contrôle de heroku et ajoutez un addon newrelic
➜ Une fois ajouté, configurez la commande ping sur votre site Web de sorte qu'il ne soit pas inactif.
➜ Accédez à Menu> Surveillance de la disponibilité (sous Paramètres) → Cliquez sur "Activer la surveillance de la disponibilité".
➜ Entrez l'URL à utiliser pour le ping (par exemple: http://spokenvote.org )
➜ Sélectionnez 1 minute pour l'intervalle
J'ai trouvé un autre site gratuit qui va constamment faire un ping sur votre site appelé Unidler
Identique à pingdom, mais ne nécessite pas de connexion.
Notez que les nouveaux types de dyno ( actuellement en version bêta , entrant en juin 2015) interdiront de garder un dyno gratuit éveillé 24h/24 et 7j/7, car il devrait dormir au moins 6 heures par jour.
Essayez donc de supprimer toute solution trouvée dans ce fil avant que cela ne soit disponible (ou payez pour le service que vous utilisez réellement).
Si vous avez accès à un serveur Unix qui est toujours actif, vous pouvez définir un travail cron sur GET
votre site Web. Selon les nouvelles conditions du plan gratuit, vous voudrez probablement désactiver le GET
s pendant la nuit, en utilisant une ligne dans votre crontab comme ceci:
*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/null
Cela indique à curl
to GET
domain.com toutes les 20 minutes entre 8 heures et 22 heures.
Soit conscient que
Assurez-vous également que votre heure système est correctement configurée pour que la fenêtre d'indisponibilité apparaisse à votre convenance.
Guy, voici une application heroku que vous pouvez exécuter pour conserver plusieurs applications heroku en vie. Ajoutez simplement les URL que vous souhaitez utiliser dans le fichier config.json.
ce travail pour moi dans une application de printemps faisant une demande http toutes les 2 minutes à la racine du chemin de lʻurl `
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.client.RestTemplate;
public class HerokuNotIdle {
private static final Logger LOG = LoggerFactory.getLogger(HerokuNotIdle.class);
@Scheduled(fixedDelay=120000)
public void herokuNotIdle(){
LOG.debug("Heroku not idle execution");
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject("http://yourapp.herokuapp.com/", Object.class);
}
}
N'oubliez pas de configurer votre contexte pour activer le planificateur et créer le bean de votre planificateur
@EnableScheduling
public class AppConfig {
@Bean
public HerokuNotIdle herokuNotIdle(){
return new HerokuNotIdle();
}
}
J'ai une application qui ne doit fonctionner que du lundi au vendredi vers midi. Je viens d'ajouter le script suivant à la crontab au travail:
#!/bin/sh
# script to unidle heroku installation for the use with cronjob
# usage in crontab:
# */5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
# The command /usr/local/bin/uptimer.sh http://www.example.com will execute every 5th minute of 11am through 3pm Mondays through Fridays in every month.
# resources: http://www.cronchecker.net
echo url to unidle: $1
echo [UPTIMER]: waking up at:
date
curl $1
echo [UPTIMER]: awake at:
date
Donc, pour toute application, déposez une autre ligne dans votre crontab comme:
*/5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com