web-dev-qa-db-ja.com

Herokuで単純なpythonスクリプトを継続的に実行する

シンプルなpython Herokuでホストし、Herokuスケジューラを使用して10分ごとに実行するスクリプトです。だから、スケジューラでrakeコマンドに入力する内容とHerokuのProcfileを変更する必要がありますか?

20
rksh

もちろん、いくつかのことを行う必要があります。

  1. 依存関係をリストするプロジェクトのルートにrequirements.txtファイルを定義します。これは、HerokuがPythonアプリを使用していることを「検出」するために使用するものです。

  2. Herokuスケジューラアドオンで、pythonスクリプトを起動するために実行する必要があるコマンドを定義します。これは、おそらくpython myscript.pyのようなものになります。

  3. 最後に、適切なHeroku PORTでリッスンするWebサーバーを用意する必要があります。そうしないと、Herokuはアプリが機能しておらず、「クラッシュした」状態にあると判断します。欲しいです。このHerokuの要件を満たすために、次のような本当にシンプルなFlask Webサーバーを実行できます...

コード(server.py):

from os import environ
from flask import Flask

app = Flask(__name__)
app.run(environ.get('PORT'))

次に、Procfileweb: python server.pyと言うだけです。

そしてそれはちょうどそれを行う必要があります=)

23
rdegges

「Herokuスケジューラ」を使用する代わりに、Herokuで無料アカウント[unverified *]を使用する場合(アドオンをインストールできない)、time.sleep(n)を使用します。 Flaskまたはこの場合はどのサーバーでも、スクリプトをフォルダーScripts(Herokuのデフォルトのapp/project内)に置き、Procfileに追加するだけです。
worker: python script.py
もちろん、script.pyをスクリプトのパス(名前を含む)に置き換えます。
worker: python Scripts/my_script.py
注:スクリプトでサードパーティのモジュール、たとえばbs4または要求を使用する場合、これらをインストールする必要があります
pipenv install MODULE_NAMEまたは作成requirements.txtそして、manage.py、Procfile、Pipfileなどの場所に配置します。 requirements.txtの次の場所:
requirements.txt

MODULE_NAME==MODULE_VERSION

それらをpip freezeで確認できます| grep MODULE_NAME
最後にgitを使用してHerokuサーバーにデプロイし、次のコマンドを実行します。

heroku ps:scale worker=1

それでおしまい!ボット/スクリプトが実行されています。ログで確認してください:

heroku logs --tail

ソース: https://github.com/michaelkrukov/heroku-python-script


unverified *-「不正使用防止のため、アドオンのプロビジョニングにはアカウントの確認が必要です。アカウントが確認されていない場合は、確認サイトにアクセスするように指示されます。」クレジットカード情報にリダイレクトします。ただし、無料のAccは引き続き使用できますが、アドオンのインストールなど、特定のオプションを無料のユーザーに使用することはできません。
https://devcenter.heroku.com/articles/getting-started-with-python#provision-add-ons

9
Belloz