Heroku Cedar: как масштабировать WEB-динамики на основе времени суток
Я хочу, чтобы мое приложение Rails 3.1 масштабировалось до 1 веб-дино в 8 утра, а затем до 0 веб-динамиков в 5 вечера.
НО, я не хочу подписываться на платный сервис, и я не могу рассчитывать, что мой домашний компьютер подключен к Интернету.
Кажется, что планировщик Heroku должен сделать это тривиальным. Любые быстрые решения или ссылки?
Ответы
Ответ 1
Ответ "да" вы можете сделать это из планировщика, и это тривиально, как только вы узнаете ответ:
- Добавьте конфигурацию heroku var с именем вашего приложения: heroku config: добавьте APP_NAME: blah
- Добавить gem 'heroku' в ваш Gemfile
- Чтобы проверить, вручную масштабируйте вверх/вниз ваше приложение: heroku ps: scale web = 2
-
Добавьте задачу rake в lib/tasks/scheduler.rake:
desc "Scale up dynos"
task :spin_up => :environment do
heroku = Heroku::Client.new('USERNAME', 'PASSWORD')
heroku.ps_scale(ENV['APP_NAME'], :type=>'web', :qty=>2)
end
# Add a similar task to Spin down
-
Добавить аддон Планировщика: аддоны героя: добавить планировщик: стандартный
- Используйте веб-интерфейс Scheduler для добавления "rake spin_up" в любое удобное для вас время.
- Добавьте задачу rake spin_down и планируйте ее когда-либо.
Примечания:
Шаг 1 необходим, потому что я не мог найти другого способа быть уверенным в имени приложения (и я использую среду "промежуточного" и "производственного" для своих приложений.
Шаг 3 требуется, поскольку в противном случае команда ruby выдает ошибку, так как требуется, чтобы вы сначала согласились (с помощью ответа "Да/Нет" ), что вы будете платить деньги в результате этого действия.
На шаге 4 я не мог найти никаких документов о том, как это сделать с помощью ключа API с помощью героя gem, поэтому он выглядит как пользователь/пароль.
Надеюсь, это поможет кому-то еще!
Ответ 2
Просто реализованный этот подход (хороший ответ выше @dnszero), подумал, что я бы обновил ответ с новым API Heroku.
Добавьте имя своего приложения в конфигурационную переменную heroku
require 'heroku-api'
desc "Scale UP dynos"
task :spin_up => :environment do
heroku = Heroku::API.new(:api_key => 'YOUR_ACCOUNT_API_KEY')
heroku.post_ps_scale(ENV['APP_NAME'], 'web', 2)
end
Это с героикой (2.31.2), heroku-api (0.3.5)
Ответ 3
Вы можете масштабировать свой веб-процесс до нуля на
heroku ps:scale web=0
или обратно до 1 через
heroku ps:scale web=1
тогда вам нужно будет настроить задачу на 8, которая масштабирует ее, и ту, которая работает на 17, которая масштабирует ее. Heroku может потребовать, чтобы вы подтвердили свою учетную запись (то есть введите данные кредитной карты), чтобы использовать планировщик Heroku Plus, и тогда вам нужно будет иметь жемчуг Heroku внутри вашего приложения и ваши учетные данные Heroku, чтобы он мог включить или отключить ваше приложение.
Но, как говорит Нил, вы получаете 750 часов в месяц бесплатно, которые не могут перевернуться в следующий месяц, так почему бы не просто оставить его работать все время?
Ответ 4
См. также полный текст, который также касается правильной команды для использования от планировщика Heroku: https://gist.github.com/maggix/8676595
Ответ 5
Поэтому я решил реализовать это в 2017 году и увидел, что драгоценный камень Heroku, используемый принятым ответом, устарел в пользу "платформы-api". Я просто подумал, что буду писать то, что сработало для меня, так как я не видел никаких других сообщений с более современным ответом.
Вот мой файл рейка, который масштабирует мои веб-диноды до количества 2. Я использовал "httparty" gem, чтобы сделать запрос PATCH с соответствующими заголовками API платформы, согласно их docs в разделе "Формирование".
require 'platform-api'
require 'httparty'
desc "Scale UP dynos"
task :scale_up => :environment do
headers = {
"Authorization" => "Bearer #{ENV['HEROKU_API_KEY']}",
"Content-Type" => "application/json",
"Accept" => "application/vnd.heroku+json; version=3"
}
params = {
:quantity => 2,
:size => "standard-1X"
}
response = HTTParty.patch("https://api.heroku.com/apps/#{ENV['APP_NAME']}/formation/web", body: params.to_json, headers: headers)
puts response
end
Ответ 6
Если вы используете кедр кедра, вы не сможете масштабировать до нулевого веб-диноза, не меняя procfile и развертывая.
Кроме того, зачем беспокоиться, если вы получите один бесплатный динод в месяц (750 динозанов, чуть больше месяца)?
Ответ 7
Или, если вы хотите использовать службу вместо своей собственной, попробуйте http://scaledynos.herokuapp.com/ - она масштабируется в зависимости от времени дня
Ответ 8
Как обновление для ответа @Ren, Heroku API API платформы делает это очень просто.
heroku = PlatformAPI.connect_oauth(<HEROKU PLATFORM API KEY>)
heroku.formation.batch_update(<HEROKU APP NAME>, {"updates" =>
[{"process" => <PROCESS NAME>,
"quantity" => <QUANTITY AS INTEGER>,
"size" => <DYNO SIZE>}]
})