2012-03-08 15 views

risposta

14

che sto facendo specifici riavvio dei lavoratori all'interno della app utilizzando un cron. Come questo:

heroku = Heroku::Client.new(ENV['APP_USERNAME'], ENV['APP_PASSWORD']) 
heroku.ps_restart(ENV['APP_NAME'], :ps =>'worker.1') 

Dal Heroku API Doc

40

Ecco il comando per riavviare qualsiasi particolare processo

heroku ps:restart worker.1 --app APP_NAME 
+0

Poiché sappiamo già dalla domanda che il particolare processo è 'worker.1', potremmo riformularlo per dire' heroku ps: restart worker.1 --app APP_NAME'. –

5

Usare il "Heroku-api" gioiello, non il "Heroku" gioiello. Usare la gemma "heroku" in questo modo funziona ancora (fino ad oggi), ma è deprecato. È pensato per essere utilizzato tramite la console.

https://github.com/heroku/heroku.rb

La gemma api sembra molto facile da usare. Afferra si chiave API dal sito Heroku, metterlo nelle variabili di applicazione di configurazione, e chiamare:

require 'heroku-api' 
heroku.post_ps_restart('app', 'ps' => 'web.1') # restart 'web.1' process for 'app' app 
1

Attualmente, è necessario prendere il "platform-api" gemma (documentation here) dal Heroku perché la "Heroku" gemma è non funziona più e la gemma "heroku-api" viene utilizzata per interagire con l'API Heroku Legacy. L'API Legacy sarà tramonto il 15 aprile, 2017.

In primo luogo è necessario creare un token OAuth tramite lo strumento da riga di comando Heroku toolbelt:

$ 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 

Usa il valore di token quando si crea un'istanza di un client:

require 'platform-api' 
heroku = PlatformAPI.connect_oauth('e7dd6ad7-3c6a-411e-a2be-c9fe52ac7ed2') 

riavvio di un banco prova specifico con questo comando:

heroku.dyno.restart(app_id_or_app_name, dyno_id_or_dyno_name) 

o riavviare un ll con questo comando:

heroku.dyno.restart_all(app_id_or_app_name) 

è possibile ottenere gli ID di tutte le tue applicazioni con

heroku.app.list 

E gli ID dynos della applicazione tramite

heroku.dyno.list(app_id_or_app_name) 
+0

Il vecchio metodo di utilizzo della configurazione HEROKU_API_KEY è ora ridondante? Devo salvare il token OAuth come una nuova configurazione var? – Tom

0

di espandere di coderuby risposta un bit:

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 

Avendo impostato le variabili d'ambiente appropriate. Puoi includerlo in un'attività rake, quindi fare in modo che lo schedulatore di Heroku lo esegua quando lo ritieni opportuno.

Problemi correlati