Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何允许工作人员在我的python/django应用程序的heroku上运行ffmpeg命令?_Django_Heroku_Ffmpeg_Django Celery_Redistogo - Fatal编程技术网

如何允许工作人员在我的python/django应用程序的heroku上运行ffmpeg命令?

如何允许工作人员在我的python/django应用程序的heroku上运行ffmpeg命令?,django,heroku,ffmpeg,django-celery,redistogo,Django,Heroku,Ffmpeg,Django Celery,Redistogo,几个星期来,我一直在想办法解决这个问题。我以前问过一个类似的问题,但我从未得到任何答复。我真的找不到任何好的文档。我所需要做的就是使用worker不关心安装了django芹菜和rq的worker在从表单上传文件时将其转换为flv。我能够在本地轻松地完成这项工作,但一周多后,无论我做了什么尝试,我都无法让它工作。我尝试为芹菜添加tasks.py文件,或为rq添加worker.py文件,但我不知道如果需要执行其他操作,例如在我的settings.py或Procfile中。我的proc文件如下所示:

几个星期来,我一直在想办法解决这个问题。我以前问过一个类似的问题,但我从未得到任何答复。我真的找不到任何好的文档。我所需要做的就是使用worker不关心安装了django芹菜和rq的worker在从表单上传文件时将其转换为flv。我能够在本地轻松地完成这项工作,但一周多后,无论我做了什么尝试,我都无法让它工作。我尝试为芹菜添加tasks.py文件,或为rq添加worker.py文件,但我不知道如果需要执行其他操作,例如在我的settings.py或Procfile中。我的proc文件如下所示:

web: gunicorn lftv.wsgi -b 0.0.0.0:$PORT
celeryd: celery -A tasks worker --loglevel=info
worker: python worker.py
My requirements.txt显示我已安装的内容,如下所示:

Django==1.4.3
Logbook==0.4.1
amqp==1.0.6
anyjson==0.3.3
billiard==2.7.3.19
boto==2.6.0
celery==3.0.13
celery-with-redis==3.0
distribute==0.6.31
dj-database-url==0.2.1
django-celery==3.0.11
django-s3-folder-storage==0.1
django-storages==1.1.6
gunicorn==0.16.1
kombu==2.5.4
pil==1.1.7
psycopg2==2.4.5
python-dateutil==1.5
pytz==2012j
redis==2.7.2
requests==1.1.0
rq==0.3.2
six==1.2.0
times==0.6
import subprocess

@task
def ffmpeg_conversion(input_file):
    converted_file = subprocess.call(input_file)
    return converted_file
my settings.py中唯一相关的内容如下:

BROKER_BACKEND = 'django'
BROKER_URL = #For this I copy/pasted the code from my redistogo add-on from heroku. Not sure if correct
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 1800}
在不占用太多空间的情况下,my tasks.py如下所示:

Django==1.4.3
Logbook==0.4.1
amqp==1.0.6
anyjson==0.3.3
billiard==2.7.3.19
boto==2.6.0
celery==3.0.13
celery-with-redis==3.0
distribute==0.6.31
dj-database-url==0.2.1
django-celery==3.0.11
django-s3-folder-storage==0.1
django-storages==1.1.6
gunicorn==0.16.1
kombu==2.5.4
pil==1.1.7
psycopg2==2.4.5
python-dateutil==1.5
pytz==2012j
redis==2.7.2
requests==1.1.0
rq==0.3.2
six==1.2.0
times==0.6
import subprocess

@task
def ffmpeg_conversion(input_file):
    converted_file = subprocess.call(input_file)
    return converted_file
我使用S3存储我的静态和媒体文件,上传可以将上传添加到我的bucket中,但是无论我尝试什么,转换都不会成功。有适合初学者的好教程吗?我遵循了heroku redis教程、芹菜文档、rq文档以及我能找到的任何其他内容,并获得了一些示例,但工作人员不会从我的视图中执行该命令。例如,我尝试过的许多事情之一:

...
ffmpeg = "ffmpeg -i %s -acodec mp3 -ar 22050 -f flv -s 320x240 %s" % (sourcefile, targetfile)
ffmpegresult = ffmpeg_conversion.delay(ffmpeg)
...
或者使用rq

...
q = Queue(connection=conn)
result = q.enqueue(ffmpeg_conversion, ffmpeg)
...

我看起来应该很简单,但我完全自学成才,从未部署过任何项目,而且似乎没有任何好的文档或教程可供我尝试做什么。我无法判断我是否完全偏离了方向,完全错过了一些重要的东西,或者离实现这一目标相对较近。我真的很感激任何意见,这让我发疯。提前谢谢

我正在尝试做类似的事情,我认为你不需要创建一个工人。为什么不使用自定义生成包,例如。 如果在操作系统级别安装了ffpmeg,那么就可以从python本身发出视频转换命令,而不需要单独的工作程序


希望这有帮助?

我似乎已经让它工作了,但是现在我得到了错误:ResponseError:max number of clients reached not same stack,但是我在heroku上使用了ffmeg,从java层调用了一个shell脚本,它工作得很好。将ffmpeg的CLI表达式包装在bash脚本中。从运行脚本的lang=py发出一个系统命令,在python中处理stdout,这应该可以工作。然后将ffmpeg的tmp输出传输到持久化api。