如何允许工作器在我的python/django应用的heroku上运行ffmpeg命令



我已经纠结了几个星期了。我以前问过一个类似的问题,但我从来没有得到任何回复。我真的找不到任何好的文档。所有我需要做的是使用一个工人(不关心工人有django-芹菜和rq安装)转换为flv文件时,它是从一个表单上传。我可以在本地轻松地完成这项工作,但一个多星期后,无论我尝试什么,我都无法让它工作。我试着为芹菜添加一个tasks.py文件,或者为rq添加一个worker.py文件,我不知道还需要做什么(如果有的话),比如在我的settings.py或Procfile中。我的配置文件看起来像:

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

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}
在不占用太多空间的情况下,我的tasks.py是这样的:
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)
...

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

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

相关内容

  • 没有找到相关文章

最新更新