2012-08-14 47 views
13

有沒有一種方法可以使用Heroku計劃程序在一天中的特定時段啓動和停止網絡測試儀?就像在營業時間說2個朝代和晚上只有1個動態?按日時間計劃網絡測試版的數量

我真的想避免把正常的用戶名/密碼憑證到應用程序本身,所以我(從每天做手工爲每個應用程序分開)尋找一種安全的方式來做到這一點。直接使用「heroku ps:scale web = 2」自然會很好,但據我所知這不被支持。

感謝提前任何反饋...

回答

14

您可以通過創建一個使用Heroku的API的腳本擴展的時間表的Heroku DYNOS。然後您在Procfile中輸入一個條目並通過Heroku Scheduler插件調用它。具體方法如下:

首先,您需要到 'Heroku的' Python模塊添加到您的requirements.txt

Heroku的== 0.1.2

接下來,創建一個配置VAR包含你的API密鑰,所以你的腳本可以使用API​​。

Heroku的配置:添加HEROKU_API_KEY = your_api_key_string

您可以找到您的API密鑰on your heroku account page

現在你可以編寫一個擴展你的dynos的python腳本。這是一個非常基本的腳本,它接受作爲命令行參數的dynos數量。

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?" 

然後你就可以定義Heroku的調度網頁內您的整個任務,或者將其定義你的Procfile內,從網頁調用Procfile進程名。我更喜歡後者,因爲它可以輕鬆更新或更改流程,而無需登錄到heroku的網站。

所以,在你Procfile創建條目:

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

,然後安排他們:

[image]

瞧!您的dynos現在將在指定的時間向上或向下放大或縮小。

-

需要注意的是,一旦你已經創建了調度網頁上的計劃任務,你不能編輯它運行一天的時間,但如果你創建一個新的任務,您可以設置時間和日然後刪除您的舊任務。

注2:如果您嘗試縮小到0 dynos,或者如果您嘗試向上擴展(如果當前存在0個Web dynos),heroku python API似乎會拋出KeyError。爲了避免這兩種情況,只要不縮小到0 dynos。

+2

這個答案令人難以置信的詳細。非常感謝你爲這次投資。非常感謝...自然,我接受你的答案作爲答案。 :) – khaos 2012-08-15 05:24:36

+0

謝謝! :)我很高興它幫助。誰知道也許其他人也會覺得它有用:) – culix 2012-08-15 06:44:54

+1

我的同事問Heroku對此的支持,他們說這可以工作,但不建議使用Heroku Scheduler,因爲它是一個「盡力而爲」的服務,這意味着它不是保證運行或可能運行多次。 – 2015-02-23 04:57:32

0

它沒有內置到平臺中,但應該是很容易通過調度和使用您的API憑證來實現。