Простой способ предотвратить Heroku холостого хода?
в бесплатных приложениях Heroku dynos, похоже, продолжает работать на холостом ходу - мое приложение имеет очень низкий трафик, но это также не очень приемлемо в моем случае, когда моим пользователям приходится ждать 20+ секунд, чтобы запустить новый dyno.
честно говоря, с такого рода ждать, многие уйдут до первой страницы даже отображает.
Итак, у меня есть проблема: должен ли я платить $ 36 в месяц, чтобы сэкономить каждому пользователю смущающе длинные 20 секунд, когда мой трафик находится в однозначных цифрах за день.
есть ли способ обойти это??
16 ответов:
вы можете установить бесплатное New Relic add-on. Он имеет функцию монитора доступности, которая будет пинговать ваш сайт дважды в минуту, тем самым предотвращая Дино от холостого хода.
более или менее то же решение, что и Джесси, но, возможно, более интегрировано в Heroku... И с несколькими льготами (мониторинг производительности просто отличный).
Примечание: для всех тех, кто говорит, что это не работает: важная часть в моем ответе "монитор доступности". Просто установка аддона не поможет. Вам также необходимо настроить мониторинг доступности с помощью URL-адреса вашего приложения heroku.
в качестве альтернативы Pingdom я предлагаю попробовать Uptimerobot. Это бесплатно и предлагает 5-минутный интервал проверки сайта. Это работает очень хорошо для меня.
обновление 7 мая 2015 года: это больше не будет возможно, так как Heroku изменит их свободный dyno чтобы предотвратить сохранение его живым в течение полных 24 часов:
еще одно важное изменение связано со сном dyno или "холостым ходом". В то время как неоплаченные приложения всегда спали после тайм-аут активности, некоторые приложения использовали автоматические службы пинга, чтобы предотвратить такое поведение. бесплатные dynos разрешены 18 часов бодрствования в 24-часовой период, и в течение следующих нескольких недель мы начнем уведомлять пользователей о приложениях, которые превышают этот предел. С введением хобби dyno ($7 в месяц) мы просим либо позволить вашему приложению спать после тайм-аута, либо перейти на эту новую опцию.
когда это будет жить? Согласно их сообщению в блоге:
приложения, работающие с одним 1X dyno, которые не накапливают никаких других обвинения Дино будут постепенно перенесены в новые бесплатные стенда начиная с 1 июля.
на мой взгляд, использование "свободного" уровня сервиса не должно приводить к запуску производственного или клиентского приложения. В то время как вышеуказанные решения работают против холостого хода Dyno, тщательно подумайте о том, что вы делаете.
Если ничего больше, используйте задание cron для пинга вашего сайта и отключите проверку на известные периоды низкого использования (т. е. на ночь), чтобы гарантировать, что Heroku не избавится от бесплатного уровня для всех остальных.
вы также можете попробовать http://kaffeine.herokuapp.com, это сделано для предотвращения Heroku приложений, чтобы заснуть. Он будет пинговать ваше приложение каждые 10 минут, так что ваше приложение не будет спать. Это совершенно бесплатно.
вы можете использовать http://pingdom.com/ чтобы проверить ваше приложение; если это делается каждую минуту или около того, heroku не будет простаивать ваше приложение и не нужно будет раскручивать.
простой ответ-если вы цените услугу, то платите за нее.
все эти "трюки", чтобы получить преимущества платного сервиса...ну это по сути как кража кабеля. Сомнительно даже перечислять их здесь. Что дальше, трюки о том, как пиратские игры?
Как и другой плакат Здесь, я ценю бесплатный сервис для разработки и тестирования, и я буду очень раздражен всеми вами этическими типами, если Heroku покончит с этим, потому что слишком много халявщиков. Я просто не думаю, что он был достаточно прямолинеен в своей критике.
протестировано и работает на моем собственном приложении Heroku с помощью узла.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'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();
Я использую Heroku планировщик аддон предоставляется Heroku бесплатно. После добавления это просто, как создание задания с 'curl http://yourapp.herokuapp.com' и с интервалом в 10 минут.
в документации Heroku говорится, что наличие более 1 веб-Дино никогда не будет простаивать. Возможно, более дешевое решение, чем $ 0.09/час, как предлагает Пьер.
Я записал шаги:
➜ добавить newrelic_rpm камень в ваш Gemfile все в рамках промежуточной и производства
➜ пакет установки
Login войдите в Панель управления heroku и добавьте NewRelic addon
➜ После добавления, настройка автоматического пинга на ваш сайт, так что он не простаивает
➜ Перейдите в меню > мониторинг доступности (в разделе Настройки) → Нажмите кнопку "включить мониторинг доступности"
➜ Введите url для ping (например:http://spokenvote.org)
➜ Выберите 1 минуту для интервала
Я нашел еще один бесплатный сайт, который будет постоянно пинговать ваш сайт под названием Unidler
то же самое, что и pingdom, но не нужно входить в систему.
обратите внимание, что новые типы dyno (в настоящее время в бета-версии, поступающий в июне 2015 года) запретит держать свободный Дино проснулся 24/7, так как он должен был бы спать не менее 6 часов в день.
поэтому попробуйте удалить любое решение, которое вы нашли в этой теме, прежде чем это выйдет (или заплатить за услугу, которую вы фактически используете).
если у вас есть доступ к серверу unix, который всегда включен, вы можете установить задание cron в
GETваш сайт. В соответствии с новыми условиями бесплатного плана, вы, вероятно, захотите отключитьGETs в ночные часы, используя строку в вашем crontab следующим образом:*/20 8-22 * * * /usr/bin/curl domain.com &> /dev/nullтаким образом
curlдоGETdomain.com каждые 20 минут между 8 и 22 часами.имейте в виду, что
- не все, кто хочет видеть ваш сайт живет в вашем часовой пояс и
- ваш сайт может получать другие запросы в середине ночи, пробуждая ваш Дино и вызывая еще один час времени использования для каждого запроса. Даже если никто другой не знает ваш домен, есть боты и искатели, которые активны все время. Поэтому рекомендуется установить процесс, определенный в crontab, чтобы быть активным только в течение 14 до 16 часов, чтобы обеспечить буфер против этих пробуждений
кроме того, убедитесь, что системное время установлено правильно так что окно времени простоя происходит, когда вы этого ожидаете.
эта работа для меня в весеннем приложении делает один 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); } }помните, что сконфигурируйте свой контекст, чтобы включить планировщик и создать компонент для вашего планировщика
@EnableScheduling public class AppConfig { @Bean public HerokuNotIdle herokuNotIdle(){ return new HerokuNotIdle(); } }
парень, вот приложение heroku, которое вы можете запустить, чтобы сохранить несколько приложений heroku в живых. Просто добавьте URL-адреса, которые вы хотите проверить в конфигурации.формат JSON.
у меня есть приложение, которое должно работать только с понедельника по пятницу около обеда. Я просто добавил следующий скрипт в 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: echo [UPTIMER]: waking up at: date curl echo [UPTIMER]: awake at: dateпоэтому для любого приложения просто поместите еще одну строку в свой crontab, например:
*/5 11-15 * * 1-5 /usr/local/bin/uptimer.sh http://www.example.com


Comments