Un modo semplice per impedire a Heroku di girare al minimo?

Nelle app gratuite di Heroku i dynos sembrano restare al minimo – la mia app ha un traffico molto basso ma non è nemmeno accettabile nel mio caso che i miei utenti debbano aspettare 20+ secondi per avviare un nuovo banco di prova.

Francamente, con quel tipo di attesa, molti andranno via prima che la prima pagina venga visualizzata.

Quindi, ho un problema: dovrei pagare $ 36 al mese per salvare ogni utente in modo imbarazzante per 20 secondi quando il mio traffico è in cifre singole al giorno.

C’è un modo per aggirare questo??

È ansible installare il componente aggiuntivo New Relic gratuito. Ha una funzionalità di monitoraggio della disponibilità che eseguirà il ping del tuo sito due volte al minuto, impedendo così il lancio del minimo.

Più o meno la stessa soluzione di Jesse, ma forse più integrata con Heroku … E con alcuni vantaggi (il monitoraggio delle prestazioni è semplicemente fantastico).

Monitoraggio della disponibilità

Nota: a tutti quelli che dicono che non funziona: la parte importante nella mia risposta è “monitor della disponibilità”. Basta installare l’addon non sarà di aiuto. È inoltre necessario impostare il monitoraggio della disponibilità con l’URL della tua app heroku.

In alternativa a Pingdom suggerisco di provare Uptimerobot . È gratuito e offre un controllo del sito a intervalli di 5 min. Funziona molto bene per me.

AGGIORNAMENTO 7 maggio 2015: Questo non sarà più ansible, poiché Heroku cambierà il loro banco di prova per impedirne il mantenimento in vita per ben 24 ore:

Un altro cambiamento importante riguarda il dyno sleeping o “idling”. Mentre le app non pagate hanno sempre dormito dopo un timeout di attività, alcune app hanno utilizzato i servizi di ping automatico per impedire tale comportamento. le dinamiche gratuite sono consentite per 18 ore per 24 ore e nelle prossime settimane inizieremo a notificare agli utenti le app che superano tale limite. Con l’introduzione del dyno per hobby ($ 7 al mese), chiediamo di lasciare la tua app in pausa dopo l’intervallo di tempo o di eseguire l’aggiornamento a questa nuova opzione.

Quando sarà questo il live? Secondo il loro post sul blog:

Le applicazioni che eseguono un singolo dino 1X che non accumula altri addebiti per dyno verranno migrate gradualmente ai nuovi dynos gratuiti a partire dal 1 ° luglio .

A mio parere, l’utilizzo del livello “gratuito” del servizio non dovrebbe alimentare una produzione o un’applicazione rivolta al cliente. Mentre le soluzioni di cui sopra funzionano contro il Dyno al minimo, pensa a quello che stai facendo.

Se non altro, utilizza un cron job per eseguire il ping del tuo sito e disabilita il controllo per i periodi noti di utilizzo ridotto (ad esempio, durante la notte) per garantire che Heroku non elimini il livello gratuito per tutti gli altri.

Puoi anche provare http://kaffeine.herokuapp.com , creato per impedire alle app di Heroku di andare a dormire. Effettua il ping della tua app ogni 10 minuti, quindi la tua app non andrà a dormire. È completamente gratuito

Puoi utilizzare http://pingdom.com/ per controllare la tua app; se fatto ogni minuto o poco più, heroku non attiverà la tua app e non avrà bisogno di fare il spin-up.

Risposta facile: se apprezzi il servizio, allora pagalo.

Tutti questi “trucchi” per ottenere i vantaggi del servizio a pagamento … beh, in pratica è come rubare il cavo. È discutibile persino elencarli qui. Qual è il prossimo, trucchi su come piratare i giochi?

Come un altro poster qui, apprezzo il servizio gratuito per lo sviluppo e il testing e sarò molto seccato per tutti i tipi con problemi di etica se Heroku riuscirà a farla franca perché ci sono troppi freeloader. Non penso che sia stato abbastanza diretto nelle sue critiche.

Testato e funzionante sulla mia app Heroku usando Node.js 0.10.x il 28/06/2013

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(); 

Nella documentazione di Heroku si dice che avere più di 1 web dyno non sarà mai inattivo. Forse una soluzione più economica di $ 0,09 / ora come suggerisce Pierre.

inserisci la descrizione dell'immagine qui

Documentazione

Io uso l’addon di Heroku Scheduler fornito da Heroku gratuitamente. Una volta aggiunto, è semplice come creare un lavoro con “curl http://yourapp.herokuapp.com ” e un intervallo di 10 minuti.

Ho annotato i passaggi:

➜ Aggiungi gem ‘newrelic_rpm’ al tuo Gemfile sotto staging e produzione
➜ installazione bundle
➜ Accedi al pannello di controllo di heroku e aggiungi un nuovo componente aggiuntivo
➜ Una volta aggiunto, configura il ping automatico sul tuo sito Web in modo che non sia inattivo
➜ Passare a Menu> Monitoraggio disponibilità (in Impostazioni) → Fare clic su “Attiva monitoraggio disponibilità”.
➜ Inserisci l’url to ping (es: http://spokenvote.org )
➜ Selezionare 1 minuto per l’intervallo

Ho trovato un altro sito gratuito che ping continuamente il tuo sito chiamato Unidler

http://unidler.herokuapp.com/

Come pingdom, ma non ha bisogno di accedere.

Si noti che i nuovi tipi di dino ( attualmente in versione beta , in arrivo a giugno 2015) vieteranno di mantenere un banco di prova libero 24 ore su 24, 7 giorni su 7, poiché dovrebbe dormire almeno 6 ore al giorno.

Quindi prova a rimuovere qualsiasi soluzione trovata in questo thread prima che questo esca (o paghi il servizio che usi effettivamente).

Se hai accesso a un server unix sempre attivo, puoi impostare un cron job per ottenere il tuo sito web. Secondo i nuovi termini del piano gratuito, probabilmente vorrai disabilitare i GET nelle ore notturne, usando una linea nel tuo crontab in questo modo:

 */20 8-22 * * * /usr/bin/curl domain.com &> /dev/null 

In questo modo si istruisce su GET domain.com ogni 20 minuti tra le ore 8 e 22.

Fai attenzione a

  1. Non tutti quelli che vogliono vedere il tuo sito web vivono nel tuo fuso orario e
  2. Il tuo sito potrebbe ricevere altre richieste nel cuore della notte, svegliando il tuo banco di prova e causando un’altra ora di utilizzo per ogni richiesta. Anche se nessun altro conosce il tuo dominio, ci sono bot e crawler che sono attivi tutto il tempo. Pertanto, è consigliabile impostare il processo definito nel crontab in modo che sia attivo solo per 14-16 ore per fornire un buffer contro questi risvegli

Inoltre, assicurati che l’orario del tuo sistema sia impostato correttamente in modo che la finestra del tempo di arresto si verifichi quando ti aspetti.

questo lavoro per me in un’applicazione di spring che effettua una richiesta http ogni 2 minuti al percorso dell’URL di root `

 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); } } 

Ricordare di configurare il contesto per abilitare lo scheduler e creare il bean per il proprio programma di pianificazione

 @EnableScheduling public class AppConfig { @Bean public HerokuNotIdle herokuNotIdle(){ return new HerokuNotIdle(); } } 

Guy, ecco un’app di heroku che puoi eseguire per mantenere attive più app di heroku. Basta aggiungere gli URL che si desidera eseguire il ping in config.json.

https://github.com/jcarras/rise-and-shine

Ho un’app che deve essere eseguita solo da lunedì a venerdì per l’ora di pranzo. Ho appena aggiunto il seguente script al crontab al lavoro:

 #!/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 

Quindi per qualsiasi app ti basta rilasciare un’altra riga nel tuo crontab come:

 */5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com