[heroku] 헤 로쿠 공회전을 방지하는 쉬운 방법?

Heroku 무료 앱에서 dynos가 유휴 상태 인 것처럼 보입니다. 내 앱의 트래픽이 매우 적지 만 사용자가 새로운 dyno를 가동시키기 위해 20 초 이상 기다려야하는 경우도 있습니다.

솔직히 그런 종류의 대기로 많은 사람들이 첫 페이지가 표시되기 전에 떠날 것입니다.

따라서 문제가 있습니다. 트래픽이 하루 한 자리 수인 경우 각 사용자를 당황스럽게 20 초 동안 절약하기 위해 한 달에 36 달러를 지불해야합니다.

이 주위에 방법이 있습니까 ??



답변

무료 New Relic 애드온을 설치할 수 있습니다 . 이 사이트에는 분당 2 회 사이트를 핑 (ping)하여 dyno가 유휴 상태가되지 않도록하는 가용성 모니터 기능이 있습니다.

Jesse와 거의 동일한 솔루션이지만 Heroku에 더 통합되었을 수도 있습니다.

가용성 모니터링

참고 : 작동하지 않는다고 말하는 모든 사람들에게 내 대답의 중요한 부분은 “가용성 모니터”입니다. 애드온을 설치하는 것만으로는 도움이되지 않습니다. 또한 heroku 앱의 URL을 사용하여 가용성 모니터링을 설정해야합니다.


답변

Pingdom의 대안으로 Uptimerobot을 사용해 보는 것이 좋습니다 . 무료이며 5 분 간격으로 사이트를 점검합니다. 그것은 나를 위해 아주 잘 작동합니다.

2015 년 5 월 7 일 업데이트 : Heroku는 24 시간 동안 완전히 유지되지 않도록 무료 dyno변경 하므로 더 이상 불가능합니다 .

또 다른 중요한 변화는 dyno 수면 또는 ‘유휴’와 관련이 있습니다. 무료 앱은 활동 시간이 만료 된 후 항상 잠을 잤지 만 일부 앱은 자동 핑 서비스를 사용하여 해당 동작을 방지했습니다. 무료 dyno는 24 시간마다 18 시간 씩 깨어날 수 있으며 앞으로 몇 주 동안 사용자에게 해당 제한을 초과하는 앱을 알리기 시작합니다. 취미 다이노 (매월 7 달러)가 도입됨에 따라 시간 초과 후 앱을 절전 모드로 전환하거나이 새로운 옵션으로 업그레이드 할 것을 요청하고 있습니다.

언제 생방송이 되나요? 그들의 블로그 게시물에 따르면 :

다른 dyno 요금이 누적되지 않는 단일 1X dyno를 실행하는 응용 프로그램은 7 월 1 일 부터 점차적으로 새로운 무료 dyno로 마이그레이션됩니다 .


답변

내 생각에, 서비스의 ‘무료’계층을 사용한다고해서 프로덕션 또는 고객 용 애플리케이션에 전원을 공급해서는 안됩니다. 위의 솔루션이 Dyno 유휴 상태에서 작동하지만 수행중인 작업에 대해 철저히 생각하십시오.

다른 방법이 없다면 cron 작업을 사용하여 사이트를 핑하고 Heroku가 다른 모든 사람의 프리 티어를 없애지 않도록 알려진 낮은 사용 기간 (즉, 야간) 검사를 비활성화하십시오.


답변

또한 http://kaffeine.herokuapp.com (내 제작)을 사용해 볼 수 있으며 Heroku 앱이 절전 모드로 전환되지 않도록하기 위해 만들어졌습니다. 앱이 10 분마다 핑되므로 앱이 절전 모드로 전환되지 않습니다. 완전 무료입니다.


답변

http://pingdom.com/ 을 사용 하여 앱을 확인할 수 있습니다. 매분 정도 수행되면 heroku는 앱을 유휴 상태로 만들지 않으며 회전 할 필요가 없습니다.


답변

쉬운 답변-서비스를 소중하게 생각하면 비용을 지불하십시오.

유료 서비스의 이점을 누리려면 이러한 모든 ‘트릭’이 필요합니다. 여기에 목록을 작성하는 것도 의문의 여지가 있습니다. 다음은 게임 해적 방법에 대한 속임수?

다른 포스터와 마찬가지로, 나는 개발과 테스트를위한 무료 서비스를 중요하게 생각하며, 프리 로더가 너무 많아서 Heroku가 그것을 없애면 모든 윤리적 장애 유형에 크게 짜증을 낼 것입니다. 나는 그가 그의 비판에 충분히 직접적이라고 생각하지 않습니다.


답변

2013 년 6 월 28 일에 Node.js 0.10.x를 사용하여 자체 Heroku 앱에서 테스트 및 작업

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