Łatwy sposób, aby zapobiec Heroku na biegu jałowym?

W darmowych aplikacjach Heroku Dyno wydaje się działać bezczynnie - moja aplikacja ma bardzo mały ruch, ale jest to również nie do przyjęcia w moim przypadku, że moi użytkownicy muszą czekać 20 + sekund, aby uruchomić nową dyno.

Szczerze mówiąc, przy takim oczekiwaniu wielu odejdzie, zanim pierwsza strona się wyświetli.

Tak więc, mam problem: czy powinienem płacić $36 miesięcznie, aby zaoszczędzić każdemu użytkownikowi żenująco długie 20 sekund, gdy mój ruch jest w jednej cyfrze dziennie.

Czy jest sposób na obejście to??

 257
Author: Sridhar Ratnakumar, 2011-03-30

16 answers

Możesz zainstalować darmowy dodatek New Relic. Posiada funkcję monitorowania dostępności, która będzie ping witryny dwa razy na minutę, zapobiegając hamowni z biegu jałowego.

Mniej więcej to samo rozwiązanie Co Jesse, ale może bardziej zintegrowane z Heroku... I z kilkoma korzyściami (monitorowanie wydajności jest po prostu świetne).

Monitorowanie dostępności

Uwaga: do wszystkich, którzy mówią, że to nie działa: ważną częścią mojej odpowiedzi jest "monitor dostępności". Po prostu instalacja dodatek nie pomoże. Musisz również skonfigurować monitorowanie dostępności za pomocą adresu URL aplikacji heroku.

 340
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-13 06:42:52

Jako alternatywę dla Pingdom proponuję spróbować Uptimerobot . Jest bezpłatny i oferuje 5-minutowe sprawdzanie witryny. Dla mnie działa bardzo dobrze.

Update 7th of May 2015: nie będzie to już możliwe, ponieważ Heroku zmieni swoje wolne dyno, aby zapobiec utrzymywaniu go przy życiu przez pełne 24 godziny:

Kolejna ważna zmiana ma związek z Dyno sleeping, czyli "na biegu jałowym". Podczas gdy aplikacje płatne zawsze spały po przekroczeniu limitu aktywności, niektóre aplikacje używały automatyczne usługi pingowania, aby zapobiec temu zachowaniu. darmowe Dyno są dozwolone 18 godzin czuwania w ciągu 24 godzin, a w ciągu najbliższych kilku tygodni zaczniemy powiadamiać użytkowników o aplikacjach, które przekraczają ten limit. Wraz z wprowadzeniem hamowni hobby ($7 miesięcznie), prosimy, aby pozwolić aplikacji spać po przerwie, lub uaktualnić do tej nowej opcji.

Kiedy to będzie na żywo? Według ich blogu:

Aplikacje uruchamiające pojedyncze 1x dyno, które nie / align = "left" / opłaty dyno będą stopniowo przenoszone na nowe wolne Dyno począwszy od 1 lipca.

 85
Author: Cristian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 19:46:09

Moim zdaniem korzystanie z "darmowej" warstwy usługi nie powinno być zasilaniem aplikacji produkcyjnej lub klienckiej. Podczas gdy powyższe rozwiązania działają na hamowni na biegu jałowym, zastanów się dokładnie, co robisz.

Jeśli nic więcej, Użyj Zadania cron, aby pingować witrynę i Wyłącz sprawdzanie znanych okresów niskiego użycia (tj. noc), aby upewnić się, że Heroku nie pozbędzie się darmowej warstwy dla wszystkich innych.

 72
Author: drowe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-21 03:01:09

Możesz również spróbować http://kaffeine.herokuapp.com , został stworzony, aby uniemożliwić aplikacji Heroku zasypianie. Będzie ping aplikacji co 10 minut, więc aplikacja nie pójdzie spać. To całkowicie za darmo.

 53
Author: Romain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-17 17:19:25

Możesz użyć http://pingdom.com / aby sprawdzić Twoją aplikację; jeśli będzie to wykonywane co minutę, heroku nie będzie bezczynnie uruchamiać Twojej aplikacji i nie będzie musiał się obracać.

 45
Author: Jesse Wolgamott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 01:18:28

Łatwa odpowiedź - jeśli cenisz usługę to zapłać za nią.

Wszystkie te "sztuczki", aby uzyskać korzyści z płatnej usługi...to jak kradzież kabla. Wątpliwe, aby nawet wymienić je tutaj. Co dalej, triki jak piratować gry?

Podobnie jak inny plakat tutaj, cenię sobie darmowy serwis do rozwoju i testowania i będę bardzo irytujący na wszystkich was, jeśli Heroku się z tym nie zgodzi, bo jest za dużo darmozjadów. Po prostu nie sądzę. był dość bezpośredni w swojej krytyce.

 35
Author: elc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-10 18:02:06

Testowałem i pracowałem nad własną aplikacją Heroku używając Node.js 0.10x on 6/28/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();
 25
Author: DubbyTT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-28 05:04:31

Używam dodatku Heroku Scheduler dostarczonego przez Heroku za darmo. Po dodaniu jest to proste jak utworzenie zadania z 'curl http://yourapp.herokuapp.com " i interwał 10 min.

 13
Author: Jordan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 22:50:18

W dokumentacji Heroku jest napisane, że posiadanie więcej niż 1 www nigdy się nie skończy. Prawdopodobnie tańsze rozwiązanie niż $0.09 / godzinę, jak sugeruje Pierre.

Tutaj wpisz opis obrazka

Dokumentacja

 10
Author: newshorts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-02 17:14:07

Zapisałem kroki:

➜ Dodaj gem 'newrelic_rpm' do pliku Gemfile w sekcji staging & production
➜ bundle install
➜ Zaloguj się do Panelu sterowania heroku i dodaj newrelic addon
➜ Po dodaniu skonfiguruj automatyczne pingowanie do swojej witryny, aby nie była bezczynna
➜ Przejdź do Menu > monitorowanie dostępności (w Ustawieniach) → Kliknij "Włącz monitorowanie dostępności"
➜ Wpisz adres url do ping (np: http://spokenvote.org )
➜ Wybierz 1 minutę dla interwału

 9
Author: Pratik Khadloya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-03 17:28:00

Znalazłem kolejną darmową stronę, która będzie stale ping witryny o nazwie Unidler

Http://unidler.herokuapp.com/

To samo co pingdom, ale nie wymaga logowania.

 3
Author: sonnyhe2002,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 04:32:52

Zauważ, że nowe typy hamowni (obecnie w wersji beta, pojawiające się w czerwcu 2015) zabraniają budzenia wolnego hamowni 24/7, ponieważ musiałaby ona spać co najmniej 6 godzin dziennie.

Więc spróbuj usunąć wszelkie rozwiązanie, które znalazłeś w tym wątku, zanim to wyjdzie (lub zapłacić za usługę, z której faktycznie korzystasz).

 3
Author: aymericbeaumet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-26 14:47:29

Jeśli masz dostęp do serwera unix, który jest zawsze aktywny, możesz ustawić zadanie cron na GET swojej stronie internetowej. Zgodnie z nowymi warunkami planu bezpłatnego prawdopodobnie będziesz chciał wyłączyć GET s w godzinach nocnych, używając linii w crontabie takiej jak:

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

To poleca curl GET domain.com co 20 minut między godziną 8 a 22.

Należy pamiętać, że

  1. nie każdy, kto chce zobaczyć Twoją stronę, żyje w twojej strefie czasowej i
  2. Twoja strona może odbieraj inne żądania w środku nocy, budząc hamownie i powodując kolejną godzinę czasu użytkowania dla każdego żądania. Nawet jeśli nikt inny nie zna Twojej domeny, istnieją boty i crawlery, które są aktywne przez cały czas. Dlatego zaleca się, aby proces zdefiniowany w crontab był aktywny tylko przez 14 do 16 godzin, aby zapewnić bufor przed tymi budzeniami

Również, upewnij się, że czas systemowy jest skonfigurowany prawidłowo tak, że okno przestojów dzieje się, gdy oczekujesz to do.

 3
Author: drs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-21 01:55:06

To działa dla mnie w aplikacji spring składającej jedno żądanie http co 2 minuty do głównej ścieżki 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);
}
}

Zapamiętaj konfigurację kontekstu, aby włączyć scheduler i utworzyć fasolę dla swojego schedulera

@EnableScheduling
public class AppConfig {

@Bean
public HerokuNotIdle herokuNotIdle(){
    return new HerokuNotIdle();
}
}
 1
Author: zeta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-11 03:18:22

Guy, oto aplikacja heroku, którą możesz uruchomić, aby utrzymać przy życiu wiele aplikacji heroku. Po prostu dodaj adresy URL, które chcesz pingować w konfiguracji.json.

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

 1
Author: ReadyBird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 07:10:02

Mam aplikację, która musi działać tylko od poniedziałku do piątku w porze lunchu. Właśnie dodałem następujący skrypt do crontab w pracy:

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

Więc dla każdej aplikacji po prostu upuść kolejną linię w crontabie jak:

*/5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com
 0
Author: RedRoosterMobile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-22 13:17:41