シンプルなpython Herokuでホストし、Herokuスケジューラを使用して10分ごとに実行するスクリプトです。だから、スケジューラでrakeコマンドに入力する内容とHerokuのProcfileを変更する必要がありますか?
もちろん、いくつかのことを行う必要があります。
依存関係をリストするプロジェクトのルートにrequirements.txt
ファイルを定義します。これは、HerokuがPythonアプリを使用していることを「検出」するために使用するものです。
Herokuスケジューラアドオンで、pythonスクリプトを起動するために実行する必要があるコマンドを定義します。これは、おそらくpython myscript.py
のようなものになります。
最後に、適切な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'))
次に、Procfile
でweb: python server.py
と言うだけです。
そしてそれはちょうどそれを行う必要があります=)
「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