2012-08-14 12 views
13

¿Hay alguna manera de utilizar el planificador Heroku para iniciar y detener dineros web durante períodos específicos del día? Como decir durante las horas de oficina 2 dynos y en la noche solo 1 dyno?número de programación de dynos web por hora del día

Realmente me gustaría evitar poner las credenciales de usuario/contraseña normales en la aplicación, así que estoy buscando una forma segura de hacerlo (además de hacerlo manualmente todos los días para cada aplicación). Usar el "heroku ps: scale web = 2" directamente sería naturalmente bueno, pero hasta donde sé, esto no es compatible.

Gracias por cualquier comentario de antemano ...

Respuesta

14

Puede escalar heroku dynos en un horario creando un script que use la API de Heroku. A continuación, realiza una entrada en su Procfile y la llama a través del complemento Heroku Scheduler. Así es como:

En primer lugar, tendrá que añadir el módulo de Python 'heroku' a tu requirements.txt:

== heroku 0.1.2

A continuación, cree una configuración que contiene var su clave API, para que su script pueda usar la API.

heroku config: añadir HEROKU_API_KEY = your_api_key_string

Puede encontrar su clave de API on your heroku account page.

Ahora podrá escribir un script de Python que escale sus dynos. Aquí hay un script muy básico que acepta el número de dynos como un argumento de línea de comandos.

import os 
import sys 

import heroku 

"""Scale heroku web processes using the heroku python API.""" 

# you may want to add better argument processing, use argparse, etc. 
dynos = int(sys.argv[1]) 
cloud = heroku.from_key(os.environ.get('HEROKU_API_KEY')) 
app = cloud.apps['your_app_name'] 

try: 
    # you may want to add a maximum dyno check here to prevent costly mistakes ;) 
    webproc = app.processes['web'] 
    webproc.scale(dynos) 

except KeyError: 
    # note: scaling to 0 dynos or attempting to scale up if 0 web dynos exist 
    # both throw this error. Make sure you have at least one dyno. 
    print >> sys.stderr, "Could not scale web processes - are there 0 web dynos running?" 

Entonces usted puede definir toda su tarea dentro de la página Web Heroku Programador, o definir dentro de su Procfile y llamar al nombre del proceso Procfile desde la página web. Prefiero lo último, ya que hace que sea fácil actualizar o cambiar el proceso sin tener que iniciar sesión en el sitio web de heroku.

Por lo tanto, crear entradas en su Procfile:

scale_up: python scale.py 2 
scale_down: python scale.py 1 

Y luego programarlos:

[image]

y listo! Sus dinas ahora aumentarán o disminuirán a una hora específica del día.

-

Tenga en cuenta que una vez que haya creado una tarea programada en la página web de programador no puede editar la hora del día que se ejecuta, pero si se crea una nueva tarea se puede establecer el tiempo y día luego borra tu tarea anterior

Nota 2: El API Python heroku parece arrojar un KeyError si tratas de bajar a 0 dinamómetros, o si se intenta ampliar si existen actualmente 0 dinamómetros web. Para evitar ambos, simplemente no reduzca a 0 dynos.

+2

Esta respuesta fue increíblemente detallada. Muchas gracias por invertir todo este tiempo. Es muy apreciado ... naturalmente acepto tu respuesta como _la_ respuesta. :) – khaos

+0

¡Gracias! :) Me alegro de que ayudó. Quién sabe, quizás otras personas también lo encuentren útil;) – culix

+1

Mi colega le pidió ayuda a Heroku sobre esto y dijeron que esto funcionaría, pero no recomendaron utilizar Heroku Scheduler ya que es un servicio de "mejor esfuerzo", lo que significa que no es garantizado para ejecutarse o puede ejecutar más de una vez. –

0

No está integrado en la plataforma, pero debe ser bastante fácil de implementar a través de programador y utilizar su token de API.

Cuestiones relacionadas