根据此示例修改应用程序,在 web.1 dyno 初始化期间部署更新的 Heroku 应用程序时遇到问题。
在我的开发环境中一切正常;当我直接启动“app”和“worker”可执行文件时,我可以从 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
应用程序.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 ...
工人.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)}")
在测功机启动期间,我收到以下错误:
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 主机名 b428 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()
worker.py 文件中突出显示的行中,因为我在运行时遇到了同样的错误heroku run python worker.py
(或直接将这些行复制到heroku run python
REPL 解释器中)