Ответ 1
Я делаю определенные рабочие перезагрузки из приложения, используя cron. Вот так:
heroku = Heroku::Client.new(ENV['APP_USERNAME'], ENV['APP_PASSWORD'])
heroku.ps_restart(ENV['APP_NAME'], :ps =>'worker.1')
Я пытаюсь найти, как назвать эквивалент (взятый из в этой статье):
heroku restart worker.1
с помощью heroku
gem. Я вижу, что есть методы restart
и ps_restart
, но не вижу, где я могу указать, чтобы перезапустить только этот 1 рабочий, а не все приложение.
Я делаю определенные рабочие перезагрузки из приложения, используя cron. Вот так:
heroku = Heroku::Client.new(ENV['APP_USERNAME'], ENV['APP_PASSWORD'])
heroku.ps_restart(ENV['APP_NAME'], :ps =>'worker.1')
Вот команда перезапуска любого процесса
heroku ps:restart worker.1 --app APP_NAME
Используйте драгоценный камень "героку-апи", а не драгоценный камень "героку". Использование драгоценного камня "героку" таким образом все еще работает (на сегодняшний день), но устарело. Он предназначен для использования через консоль.
https://github.com/heroku/heroku.rb
Api gem выглядит очень прост в использовании. Возьмите ключ API с сайта heroku, поместите его в переменные конфигурации приложения и вызовите:
require 'heroku-api'
heroku.post_ps_restart('app', 'ps' => 'web.1') # restart 'web.1' process for 'app' app
В настоящее время вы должны взять " platform-api" gem ( здесь) от heroku, потому что драгоценный камень "heroku" больше не работает, и камень "heroku-api" используется для взаимодействия с API-интерфейсом Heroku Legacy. API Legacy будет закатом 15 апреля 2017 года.
Сначала вам нужно создать токен oAuth с помощью инструмента командной строки toolkelt героя:
$ heroku plugins:install heroku-cli-oauth
$ heroku authorizations:create -d "Platform API example token"
Created OAuth authorization.
ID: 2f01aac0-e9d3-4773-af4e-3e510aa006ca
Description: Platform API example token
Scope: global
Token: e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2
Используйте значение Token при создании экземпляра клиента:
require 'platform-api'
heroku = PlatformAPI.connect_oauth('e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2')
перезапустите конкретный dyno с помощью этой команды:
heroku.dyno.restart(app_id_or_app_name, dyno_id_or_dyno_name)
или перезапустите все с помощью этой команды:
heroku.dyno.restart_all(app_id_or_app_name)
Вы можете получить идентификаторы всех ваших приложений с помощью
heroku.app.list
И идентификаторы приложений с помощью
heroku.dyno.list(app_id_or_app_name)
Чтобы расширить на coderuby немного ответьте:
heroku = PlatformAPI.connect_oauth(ENV['PLATFORM_API_TOKEN'])
worker_ids = heroku.dyno
.list(ENV['HEROKU_APP_NAME'])
.select { |dyno| dyno['type'] == 'worker' }
.map { |dyno| dyno['id'] }
worker_ids.each do |id|
heroku.dyno.restart(ENV['HEROKU_APP_NAME'], id)
end
Установив соответствующие переменные среды. Вы можете включить это в задачу рейка, тогда планировщик Heroku запустит его, когда вы сочтете нужным.