如何允许worker在heroku上为我的python / django应用程序运行ffmpeg命令?

时间:2013-01-16 19:29:02

标签: django heroku ffmpeg django-celery redistogo

我一直在试图解决这个问题几周。我之前曾问过here发现的类似问题,但我从未收到任何回复。我真的找不到任何好的文档。我需要做的就是使用一个工人(不关心什么工人有django-celery和rq安装)从文件上传文件时将文件转换为flv。我能够在当地轻松完成这项工作,但经过一周多的时间,无论我尝试过什么,我都无法让它工作。我尝试为celery添加tasks.py文件,或者为rq添加一个worker.py文件,我不知道还需要做什么(如果有的话),例如在我的settings.py或Procfile中。我的procfile看起来像:

web: gunicorn lftv.wsgi -b 0.0.0.0:$PORT
celeryd: celery -A tasks worker --loglevel=info
worker: python worker.py

我的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

我的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}

不试图占用太多空间,我的tasks.py看起来像这样:

import subprocess

@task
def ffmpeg_conversion(input_file):
    converted_file = subprocess.call(input_file)
    return converted_file

我使用S3来存储我的静态和媒体文件,并且上传工作(将上传添加到我的存储桶),但无论我尝试什么,转换永远不会。绝对的初学者有一个很好的教程吗?我遵循了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)
...

我似乎应该很简单,但是我完全是自学成才,并且从未部署过任何项目,而且似乎没有任何好的文档或教程可用于我想要做的事情。我无法判断我是否完全失去并且完全错过了一些重要或相对接近的工作。我真的很感激任何输入,这让我疯狂。提前致谢。

1 个答案:

答案 0 :(得分:0)

我正在尝试做类似的事情,我认为你不需要创造一个工人。为什么不使用自定义构建包,例如https://github.com/integricho/heroku-buildpack-python-ffmpeg。 如果您在操作系统级别安装了ffpmeg,则可以从python本身发出视频转换命令,而无需单独的工作程序。

希望有帮助吗?