2012-08-14 4 views
13

Webダイノスを特定の時間帯に開始および停止するには、Herokuスケジューラを使用する方法がありますか?営業時間中に2 dynosと夜に1 dynoだけと言うのが好きですか?時間帯別ウェブダイノスのスケジュール数

私は本当に普通のユーザーを置くことを避けたいと思います。つまり、資格情報をアプリケーション自体に渡すことは避けたいので、安全な方法を探しています。 "heroku ps:scale web = 2"を直接使うのは当然のことですが、これがサポートされていない限り私は知っています。これは、プラットフォームに組み込まれていないが、スケジューラと、あなたのAPIトークンを使用して経由で実装するのはかなり簡単なはず

答えて

14

Heroku APIを使用するスクリプトを作成することで、スケジュールに従ってheroku dynosを拡大縮小できます。 Procfileでエントリを作成し、Heroku Schedulerアドオンを使用して呼び出します。次は

Herokuの== 0.1.2

、含まれているコンフィグVARを作成する:あなたはrequirements.txtに 'Herokuの' Pythonモジュールを追加する必要があります

まず:ここではどのようですAPIキーを使用すると、スクリプトでAPIを使用できます。

Herokuのコンフィグ:あなたのAPIキーon your heroku account pageを見つけることができます

をyour_api_key_string = HEROKU_API_KEYを追加します。

これで、あなたの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のスケジューラ、Webページ内のあなたの全体のタスクを定義するか、またはあなたのProcfileの内側にそれを定義し、WebページからProcfileプロセス名を呼び出すことができます。 herokuのウェブサイトにログインしなくても、プロセスを更新したり変更したりすることが容易になるので、後者を好む。

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

をし、それらをスケジュール:

だから、あなたのProcfileにエントリを作成

[image]

出来上がりを!あなたのdynosは、指定された時刻に拡大または縮小されます。

- あなたはスケジューラのWebページ上でスケジュールされたタスクを作成したら、あなたはそれが実行される時刻を編集することはできませんが、新しいタスクを作成する場合は、時間の日に設定することができますことを

注意と古いタスクを削除します。

注2:heroku python APIは、0のスケールにスケールダウンしようとすると、または現在0のウェブダイノスが存在する場合にスケールアップしようとすると、KeyErrorをスローするようです。両方を避けるには、0に調整しないでください。

+2

この回答は信じられないほど詳細でした。今回はすべて投資していただきありがとうございます。自然に私はあなたの答えを_the_答えとして受け入れます。 :) – khaos

+0

ありがとう! :)私はそれが助けてうれしいです。 ) – culix

+1

私の同僚はこれについてHerokuのサポートに尋ねてきましたが、これはうまくいくと言いましたが、Heroku Schedulerは「ベストエフォート型」サービスであることをお勧めしませんでした。実行が保証されているか、複数回実行されている可能性があります。 –

0

事前に任意のフィードバックのための

おかげで...。

関連する問題