2012-03-08 28 views

Respuesta

14

que estoy haciendo reinicia específicas de los trabajadores dentro de la aplicación usando un cron. De esta manera:

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

Desde el Heroku API Doc

40

Este es el comando para reiniciar cualquier proceso particular

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

Como ya sabemos por la pregunta de que el proceso en particular es 'worker.1', podríamos reformularlo para decir' heroku ps: restart worker.1 --app APP_NAME'. –

5

uso del "heroku-api" gema, no el "heroku" joya. El uso de la gema "heroku" de esta manera todavía funciona (a partir de hoy), pero está en desuso. Está destinado a ser utilizado a través de la consola.

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

La gema API se ve muy fácil de usar. Agarrará clave de API en el sitio web heroku, lo puso en sus variables de aplicación de configuración, y llamar a:

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

Actualmente, usted tiene que tomar el "platform-api" joya (documentation here) de heroku porque el "heroku" joya es ya no funciona y la gema "heroku-api" se usa para interactuar con la API Heroku Legacy. La API legado será la puesta del sol el 15 de abril de 2017.

En primer lugar hay que crear un token de OAuth a través de la herramienta de línea de comandos heroku cinturón de herramientas:

$ 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 

Usar el valor simbólico al crear instancias de un cliente:

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

reinicio de un banco de pruebas específico con este comando:

heroku.dyno.restart(app_id_or_app_name, dyno_id_or_dyno_name) 

o reiniciar una ll con este comando:

heroku.dyno.restart_all(app_id_or_app_name) 

, usted puede obtener los identificadores de todas sus aplicaciones con

heroku.app.list 

Y los identificadores de dinamómetros de la aplicación a través de

heroku.dyno.list(app_id_or_app_name) 
+0

¿El método anterior de utilizar HEROKU_API_KEY config var ahora es redundante? ¿Debo guardar el token OAuth como una nueva configuración var? – Tom

0

Para ampliar de coderuby respuesta una 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 

Después de haber establecido las variables de entorno apropiadas. Podría incluir esto en una tarea de rake y luego hacer que el programador de Heroku lo ejecute cuando lo considere oportuno.