Легкий способ предотвратить Хероку на холостом ходу?

В бесплатных приложениях Heroku динамики, похоже, продолжают работать на холостом ходу - у моего приложения очень низкий трафик, но в моем случае это тоже не очень приемлемо, что мои пользователи должны ждать 20 + секунд, чтобы развернуть новый дино.

Откровенно говоря, с таким ожиданием многие уйдут, пока не отобразится первая страница.

Итак, у меня проблема: должен ли я платить 36 долларов в месяц, чтобы сохранить каждого пользователя смущающе долгое 20 секунд, когда мой трафик составляет одну цифру в день.

Есть ли способ обойти это?

Ответ 1

Вы можете установить бесплатное дополнение Новое реликвии. Он имеет функцию контроля доступности, которая будет пинговать ваш сайт дважды в минуту, тем самым не позволяя диктону работать на холостом ходу.

Более или менее то же решение, что и Джесси, но, возможно, более интегрировано в Heroku... И с несколькими преимуществами (мониторинг производительности просто велик).

Availability monitoring

Примечание: всем, кто говорит, что это не работает: важной частью моего ответа является "монитор доступности". Просто установка аддона не поможет. Вам также необходимо настроить мониторинг доступности с помощью URL-адреса вашего приложения heroku.

Ответ 2

В качестве альтернативы Pingdom я предлагаю попробовать Uptimerobot. Он бесплатный и предлагает 5-минутный интервал проверки сайта. Это работает очень хорошо для меня.

ОБНОВЛЕНИЕ 7 мая 2015 года: Это больше не будет возможно, так как Heroku изменит свой бесплатный динамо, чтобы не допустить его сохранения за 24 часа:

Еще одно важное изменение связано с диновым сном или "бездействием". Хотя неоплачиваемые приложения всегда спали после таймаута активности, в некоторых приложениях использовались автоматические службы ping для предотвращения такого поведения. бесплатные динозамы разрешены на 18 часов в течение 24 часов, и в течение следующих нескольких недель мы начнем уведомлять пользователей приложений, которые превышают этот предел. С введением хобби dyno ($ 7 в месяц), мы просим либо позволить вашему приложению спать после тайм-аута, либо перейти на этот новый вариант.

Когда это будет жить? Согласно их сообщению в блоге:

Приложения, в которых работает один динамик 1X, который не накапливает никаких других динамические сборы будут постепенно перенесены на новые бесплатные диноды начиная с 1 июля.

Ответ 3

По моему мнению, использование "бесплатного" уровня обслуживания не должно приводить к тому, что производство или клиент сталкиваются с приложением. Хотя вышеупомянутые решения работают против холостого хода Dyno, тщательно подумайте о том, что вы делаете.

Если ничего другого, используйте задание cron для проверки вашего сайта и отключите проверку известных периодов низкого использования (т.е. за одну ночь), чтобы гарантировать, что Heroku не избавится от свободного уровня для всех остальных.

Ответ 4

Вы также можете попробовать http://kaffeine.herokuapp.com (сделанный мной), это сделано для предотвращения перехода приложений Heroku в спящий режим. Он будет проверять ваше приложение каждые 10 минут, поэтому ваше приложение не будет спать. Это совершенно бесплатно.

Ответ 5

Вы можете использовать http://pingdom.com/, чтобы проверить свое приложение; если делать каждую минуту или около того, героику не будет простаивать ваше приложение и не нужно будет раскручиваться.

Ответ 6

Простой ответ - если вы оцениваете услугу, то платите за нее.

Все эти "трюки", чтобы получить преимущества платного обслуживания... ну, по сути, это как кража кабеля. Сомнительно даже перечислить их здесь. Что дальше, трюки о том, как пиратские игры?

Как и другие плакаты здесь, я ценю бесплатную услугу для разработки и тестирования, и я буду сильно раздражаться во всех вас, не связанных с этикой, если Heroku справится с этим, потому что слишком много freeloaders. Я просто не думаю, что он был достаточно прямым в своей критике.

Ответ 7

Протестировано и работает на моем собственном приложении Heroku, используя Node.js 0.10.x от 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 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();

Ответ 8

Я использую аддон Helloku Scheduler, предоставленный Heroku бесплатно. После добавления это просто, как создание задания с помощью curl http://yourapp.herokuapp.com 'и интервала в 10 минут.

Ответ 9

В документации Heroku говорится, что более 1 веб-dyno никогда не будет простаивать. Возможно, более дешевое решение, чем $0,09/час, как говорит Пьер.

enter image description here

Документация

Ответ 10

Я записал следующие шаги:

➜ Добавьте gem 'newrelic_rpm' в свой Gemfile при постановке и выпуске

➜ комплект для установки
➜ Войдите в панель управления heroku и добавьте newrelic addon
➜ После добавления настройте автоматическое пинирование на свой сайт, чтобы он не простаивал
➜ Просмотрите меню > Мониторинг доступности (в разделе "Настройки" ) → Нажмите "Включить мониторинг доступности"
➜ Введите URL-адрес для ping (например: http://spokenvote.org)
➜ Выберите 1 минуту для интервала

Ответ 11

Я нашел еще один бесплатный сайт, который будет постоянно пинговать ваш сайт под названием Unidler

http://unidler.herokuapp.com/

То же, что и pingdom, но не нужно входить в систему.

Ответ 12

Обратите внимание, что новые типы динозавров (в настоящее время в бета-версии, входящие в июне 2015 года), запретят поддерживать свободный диногенератор 24 часа в сутки, так как он должен был бы спать не менее 6 часов в день.

Поэтому попробуйте удалить любое решение, которое вы нашли в этом потоке, прежде чем это выйдет (или оплатите за ту услугу, которую вы действительно используете).

Ответ 13

Если у вас есть доступ к постоянно действующему серверу unix, вы можете установить задание cron на GET на своем веб-сайте. В соответствии с новыми условиями бесплатного плана вы, вероятно, захотите отключить GET в ночные часы, используя строку в вашем crontab следующим образом:

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

Это указывает curl на GET domain.com каждые 20 минут между 8 и 22 часами.

Помните, что

  • Не каждый, кто хочет видеть ваш сайт, живет в вашем часовом поясе и
  • Ваш сайт может получать другие запросы в середине ночи, пробуждая дино и вызывая еще один час использования для каждого запроса. Даже если никто не знает ваш домен, есть боты и сканеры, которые активны все время. Поэтому рекомендуется настроить процесс, определенный в вашем кронтабе, активным только от 14 до 16 часов, чтобы обеспечить буфер против этих пробуждений.

Кроме того, убедитесь, что ваше системное время настроено правильно, чтобы окно простоя произошло, когда вы ожидаете его.

Ответ 14

эта работа для меня в приложении spring делает один HTTP-запрос каждые 2 минуты на корневой путь 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);
}
}

Не забудьте настроить свой контекст для включения планировщика и создать bean для вашего планировщика

@EnableScheduling
public class AppConfig {

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

Ответ 15

Парень, вот приложение heroku, которое вы можете запустить, чтобы сохранить несколько приложений heroku. Просто добавьте URL-адреса, которые вы хотите выполнить ping в config.json.

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

Ответ 16

У меня есть приложение, которое нужно запускать только с понедельника по пятницу в обеденное время. Я просто добавил следующий script к crontab на работе:

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

Итак, для любого приложения просто добавьте еще одну строку в ваш crontab, например:

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

Ответ 17

Я думаю, что самое простое решение - это самостоятельно пинговать свой собственный сервер каждые 30 минут. Вот код, который я использую в своем проекте node.js для предотвращения сна.

const request = require('request');
const ping = () => request('https://<my-app-name>.herokuapp.com/', (error, response, body) => {
    console.log('error:', error); // Print the error if one occurred
    console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
    console.log('body:', body); // Print body of response received
});
setInterval(ping, 20*60*1000); // I have set to 20 mins interval

Ответ 18

Большинство ответов здесь устарели или в настоящее время не работают. Текущий уровень бесплатного сервиса heroku дает вам 550 часов бесплатного доступа к динамо. А проверенный бесплатный аккаунт дает вам 1000 часов бесплатного динамо. Я написал статью о том, как мое бесплатное приложение оставалось без сна.

https://link.medium.com/uDHrk5HAD0

Надеюсь, что это поможет всем, кто нуждается в решении в 2019 году