Heroku Cedar: как масштабировать веб-динос в зависимости от времени суток - PullRequest
12 голосов
/ 08 февраля 2012

Я хочу, чтобы мое приложение Rails 3.1 масштабировалось до 1 веб-динамо в 8:00, а затем до 0 веб-динамо в 17:00.

НО, я не хочу подписываться на платную услугу, и я не могу рассчитывать на то, что мой домашний компьютер подключен к Интернету.

Кажется, что планировщик Heroku должен сделать это тривиальным. Какие-нибудь быстрые решения или ссылки?

Ответы [ 8 ]

11 голосов
/ 05 октября 2012

Только что реализовал этот подход (хороший ответ выше @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

Это с Heroku (2.31.2), Heroku-API (0.3.5)

11 голосов
/ 09 февраля 2012

Ответ «да», вы можете сделать это из планировщика, и это просто, если вы знаете ответ:

  1. Добавьте конфигурационный файл heroku с именем вашего приложения: config Hero: добавьте APP_NAME: бла
  2. Добавьте драгоценный камень 'heroku' в свой Gemfile
  3. Чтобы проверить, вручную увеличьте / уменьшите ваше приложение: heroku ps: scale web = 2
  4. Добавить задачу 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
    
  5. Добавить планировщик дополнений: heroku дополнений: добавить планировщик: стандарт

  6. Используйте веб-интерфейс планировщика, чтобы добавить "rake spin_up" в любое удобное время
  7. Добавьте задачу rake spin_down и запланируйте ее на всякий случай.

Примечания: Шаг 1 необходим, потому что я не смог найти другого способа быть уверенным в названии приложения (и я использую «готовые» и «производственные» среды для своих приложений.

Шаг 3 является обязательным, поскольку в противном случае команда ruby ​​выдает ошибку, поскольку требует, чтобы вы сначала согласились (посредством ответа Да / Нет), что с вас будут списаны деньги в результате этого действия.

На шаге 4 я не смог найти никаких документов о том, как сделать это с помощью ключа API через gem heroku, поэтому похоже, что требуется user / pass.

Надеюсь, это поможет кому-то еще!

3 голосов
/ 08 февраля 2012

Вы можете масштабировать свой веб-процесс до нуля на

heroku ps:scale web=0

или вернуться к 1 с помощью

heroku ps:scale web=1

.затем нужно настроить задачу на 8, которая масштабирует ее, и задачу, которая работает на 17, которая уменьшает ее.Heroku может потребовать, чтобы вы подтвердили свою учетную запись (то есть введите данные кредитной карты), чтобы использовать Heroku Scheduler plus, после чего вам потребуется иметь драгоценный камень Heroku в своем приложении и свои учетные данные Heroku, чтобы оно могло включать или выключать ваше приложение.

Но, как говорит Нил, вы получаете 750 часов в месяц бесплатно, что не может быть перенесено на следующий месяц, так почему бы не оставить его включенным все время?

1 голос
/ 23 сентября 2017

Поэтому я решил реализовать это в 2017 году и увидел, что драгоценный камень Heroku, используемый в принятом ответе, устарел в пользу драгоценного камня 'platform-api'.Я просто подумал, что опубликую то, что мне помогло, поскольку я не видел других постов с более актуальным ответом.

Вот мой файл рейка, который масштабирует мои веб-динос до количестваиз 2. Я использовал гем 'httparty', чтобы сделать запрос PATCH с соответствующими заголовками для API платформы в соответствии с их документами в разделе "Формирование".

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
1 голос
/ 29 января 2014

См. Также эту полную суть, которая также касается правильной команды для использования из планировщика Heroku: https://gist.github.com/maggix/8676595

0 голосов
/ 08 ноября 2017

В качестве обновления к ответу @ Рена, * Hermeu Платформа API Gem делает это действительно просто.

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>}]
})
0 голосов
/ 20 мая 2015

Или, если вы хотите использовать службу вместо реализации собственной, попробуйте http://scaledynos.herokuapp.com/ - она ​​масштабируется в зависимости от времени суток

0 голосов
/ 08 февраля 2012

Если вы работаете в стеке кедров, вы не сможете масштабировать до нуля веб-динамо без изменения procfile и развертывания.

Кроме того, зачем беспокоиться, если вы получаете одну бесплатную динамо в месяц (750 динамо часов, фактически чуть больше месяца)? ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...