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:
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.
Esta respuesta fue increíblemente detallada. Muchas gracias por invertir todo este tiempo. Es muy apreciado ... naturalmente acepto tu respuesta como _la_ respuesta. :) – khaos
¡Gracias! :) Me alegro de que ayudó. Quién sabe, quizás otras personas también lo encuentren útil;) – culix
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. –