如何使用Web流程将任务添加到作业队列中以将Flask App部署到Heroku

问题描述

在Heroku中运行Flask应用时出现此错误

UnicodeError: label empty or too long
2020-08-31T04:37:51.710930+00:00 app[web.1]: 
2020-08-31T04:37:51.710931+00:00 app[web.1]: The above exception was the direct cause of the following exception:
2020-08-31T04:37:51.710931+00:00 app[web.1]: 
2020-08-31T04:37:51.710932+00:00 app[web.1]: Traceback (most recent call last):
2020-08-31T04:37:51.710932+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py",line 2447,in wsgi_app
2020-08-31T04:37:51.710932+00:00 app[web.1]: response = self.full_dispatch_request()
2020-08-31T04:37:51.710933+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py",line 1952,in full_dispatch_request
2020-08-31T04:37:51.710933+00:00 app[web.1]: rv = self.handle_user_exception(e)
2020-08-31T04:37:51.710934+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py",line 1821,in handle_user_exception
2020-08-31T04:37:51.710934+00:00 app[web.1]: reraise(exc_type,exc_value,tb)
2020-08-31T04:37:51.710935+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/_compat.py",line 39,in reraise
2020-08-31T04:37:51.710935+00:00 app[web.1]: raise value
2020-08-31T04:37:51.710936+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py",line 1950,in full_dispatch_request
2020-08-31T04:37:51.710936+00:00 app[web.1]: rv = self.dispatch_request()
2020-08-31T04:37:51.710936+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/flask/app.py",line 1936,in dispatch_request
2020-08-31T04:37:51.710937+00:00 app[web.1]: return self.view_functions[rule.endpoint](**req.view_args)
2020-08-31T04:37:51.710937+00:00 app[web.1]: File "/app/app/app.py",line 109,in predict
2020-08-31T04:37:51.710937+00:00 app[web.1]: job = predictHelper.delay(request)
2020-08-31T04:37:51.710938+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/rq/decorators.py",line 68,in delay
2020-08-31T04:37:51.710938+00:00 app[web.1]: retry=self.retry)
2020-08-31T04:37:51.710939+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/rq/queue.py",line 365,in enqueue_call
2020-08-31T04:37:51.710939+00:00 app[web.1]: job = self.enqueue_job(job,at_front=at_front)
2020-08-31T04:37:51.710940+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/rq/queue.py",line 473,in enqueue_job
2020-08-31T04:37:51.710940+00:00 app[web.1]: job.save(pipeline=pipe)
2020-08-31T04:37:51.710940+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/rq/job.py",line 585,in save
2020-08-31T04:37:51.710941+00:00 app[web.1]: if self.get_redis_server_version() >= StrictVersion("4.0.0"):
2020-08-31T04:37:51.710941+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/rq/job.py",line 593,in get_redis_server_version
2020-08-31T04:37:51.710942+00:00 app[web.1]: self.redis_server_version = get_version(self.connection)
2020-08-31T04:37:51.710942+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/rq/utils.py",line 260,in get_version
2020-08-31T04:37:51.710942+00:00 app[web.1]: version_string = connection.info("server")["redis_version"]
2020-08-31T04:37:51.710943+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/redis/client.py",line 1306,in info
2020-08-31T04:37:51.710943+00:00 app[web.1]: return self.execute_command('INFO',section)
2020-08-31T04:37:51.710943+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/redis/client.py",line 898,in execute_command
2020-08-31T04:37:51.710944+00:00 app[web.1]: conn = self.connection or pool.get_connection(command_name,**options)
2020-08-31T04:37:51.710944+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/redis/connection.py",line 1192,in get_connection
2020-08-31T04:37:51.710945+00:00 app[web.1]: connection.connect()
2020-08-31T04:37:51.710945+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/redis/connection.py",line 559,in connect
2020-08-31T04:37:51.710945+00:00 app[web.1]: sock = self._connect()
2020-08-31T04:37:51.710946+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/redis/connection.py",in _connect
2020-08-31T04:37:51.710946+00:00 app[web.1]: socket.soCK_STREAM):
2020-08-31T04:37:51.710947+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/socket.py",line 745,in getaddrinfo
2020-08-31T04:37:51.710947+00:00 app[web.1]: for res in _socket.getaddrinfo(host,port,family,type,proto,flags):
2020-08-31T04:37:51.711035+00:00 app[web.1]: UnicodeError: encoding with 'idna' codec Failed (UnicodeError: label empty or too long)

这是它源自的文件

Imports...

    rc = Redis("redis://h:pd241196cb1174dbb206aa362d31e525b14e5c8e18cce3c2917539c149ca7365e@ec2-3-94-63-99.compute-1.amazonaws.com:25779") #create redis connection for the queue
    
    @job('low',connection=rc,timeout=900)
    def predictHelper(request):
        if request.method == 'POST':
            #request stock ticker that user inputs
            ticker = request.form['ticker']
            (computation for rest of function)...
            return data

@app.route('/predict',methods=['POST'])
def predict():
    job = predictHelper.delay(request)
    time.sleep(900)
    data = job.result
    return render_template('index.html',prediction_text="Text message with the predicted "+str(data)+" stock price for tomorrow has been sent!")

我正在尝试在我的Heroku Web进程中使用python-rq实现后台工作程序。我不确定是否需要为此使用Heroku worker进程。预测函数执行需要15分钟,因此这就是为什么我添加后台工作程序的原因。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)