この例に基づいてアプリを変更すると、web.1 dyno の初期化中に更新された Heroku アプリをデプロイするときに問題が発生します。
私の開発環境ではすべて正常に動作しています。「アプリ」と「ワーカー」の実行可能ファイルを直接起動すると、127.0.0.1:5000 から作業中のアプリにアクセスできます
アプリの一部として作成された postgresql および redistogo アドオンを既に持っています...
heroku 設定ファイル
=== app Config Vars
APP_SETTINGS: config.StagingConfig
DATABASE_URL: postgres://[points-to-AWS-EC2].compute-1.amazonaws.com:[port]/[identifier]
REDISTOGO_URL: redis://redistogo:[identifier]@pike.redistogo.com:[port]/
プロフィール
web: bash heroku.sh
heroku.sh
#!/bin/bash
gunicorn app:app --daemon
python worker.py
app.py
from collections import Counter
from datetime import datetime
import json
import re
import operator
import os
from flask import Flask, render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from requests import get, exceptions as rx
import nltk
from rq import Queue
from rq.job import Job
from validators import url as vurl
from worker import conn
app = Flask(__name__, template_folder='app-templates/')
app.config.from_object(os.environ['APP_SETTINGS'])
db = SQLAlchemy(app)
q = Queue(connection=conn)
def worker_task(url):
'''
takes website url and ...
worker.py
import os
import redis
from rq import Worker, Queue, Connection
listen = ['default']
redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
conn = redis.from_url(redis_url)
if __name__ == '__main__':
# for tracking worker job in a terminal
# assumptions: redis-server is running
try:
with Connection(conn):
worker = Worker(list(map(Queue, listen)))
--->>> worker.work() <<<---
except Exception as e:
print(f"{str(e)}")
dyno の起動中に、次のエラーが発生します。
heroku[web.1]:状態がクラッシュから開始に変わりました
heroku[web.1]: コマンドでプロセスを開始
bash heroku.sh
app[web.1]:コマンド # 2 (HSET rq:worker:2bd1d3d3a7f04d2fb7a09b34786689bf 誕生 2020-05-23T11:28:04.485474Z last_heartbeat 2020-05-23T11:28:04.485474Z キュー デフォルト pid 11 ホスト名 b425 b9c2-b2195e234978 バージョン 1.4.1 python_version 3.7.4 (デフォルト、2019 年 9 月 12 日、01:19:52)
app[web.1]: [GCC 7.4.0]) パイプラインのエラーが発生しました: 'hset' コマンドの引数の数が間違っています
heroku[web.1]: プロセスはステータス 0 で終了しました
heroku[web.1]: 状態が起動中からクラッシュに変更されました
worker.work()
実行時に同じエラーが発生するため(または、これらの行をREPL インタープリターheroku run python worker.py
に直接コピーする) 、エラーが worker.py ファイルの強調表示された行にあると確信しています。heroku run python