2016-09-07 11 views
2

私はdjangoを使用してビルドをtravis-ciに送信しています。これはテストでビルドに失敗しています。私のローカルシステム上のPythonのサブプロセスPopenはローカルとリモートのシステムで異なって動作します

make_mp3(mp3_path, request.FILES['audio_file']) 

は、テストが正常に動作して渡します。問題のある行が

from subprocess import Popen, PIPE 

def make_mp3(path, blob): 
    process = Popen(
     ['lame', '-', '--comp', '40', path], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
    stdout_data = process.communicate(input=blob.read()) 
    return stdout_data 

関数を呼び出す行はここにある...この機能です。私はしばらくの間、この関数を使用しており、常に期待どおりに動作します。これは私のシステムでテストに合格し、ビルドに失敗していましたしかし、なぜ私はそれが私にこのトレースバックを与えるビルドのトラヴィス-CIに送信するとき...

====================================================================== 
ERROR: test_post_upload_audio_word (define.tests.ViewTests) 
Testing the audio upload function for word audio 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/travis/build/deltaskelta/langalang/define/tests.py", line 827, in test_post_upload_audio_word 
    'audio_file': audio_file}) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/test/client.py", line 541, in post 
    secure=secure, **extra) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/test/client.py", line 343, in post 
    secure=secure, **extra) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/test/client.py", line 409, in generic 
    return self.request(**r) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/test/client.py", line 494, in request 
    six.reraise(*exc_info) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/core/handlers/exception.py", line 39, in inner 
    response = get_response(request) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/utils/decorators.py", line 67, in _wrapper 
    return bound_func(*args, **kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view 
    return view_func(request, *args, **kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/utils/decorators.py", line 63, in bound_func 
    return func.__get__(self, type(self))(*args2, **kwargs2) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/utils/decorators.py", line 67, in _wrapper 
    return bound_func(*args, **kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view 
    return view_func(request, *args, **kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/utils/decorators.py", line 63, in bound_func 
    return func.__get__(self, type(self))(*args2, **kwargs2) 
    File "/home/travis/build/deltaskelta/langalang/define/views.py", line 21, in dispatch 
    return super(Define, self).dispatch(*args, **kwargs) 
    File "/home/travis/virtualenv/python2.7.12/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch 
    return handler(request, *args, **kwargs) 
    File "/home/travis/build/deltaskelta/langalang/define/views.py", line 89, in post 
    return upload_audio(request, context) 
    File "/home/travis/build/deltaskelta/langalang/define/views_func.py", line 251, in upload_audio 
    make_mp3(mp3_path, request.FILES['audio_file']) 
    File "/home/travis/build/deltaskelta/langalang/define/views_func.py", line 25, in make_mp3 
    ['lame', '-', '--comp', '40', path], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
    File "/opt/python/2.7.12/lib/python2.7/subprocess.py", line 711, in __init__ 
    errread, errwrite) 
    File "/opt/python/2.7.12/lib/python2.7/subprocess.py", line 1343, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

私が見ることができません。 request.FILESが見つかりましたので、入力ファイルは明らかです。ディレクトリが存在します。チェックしました。だから、私に言っていることは何も存在しないのですか?

+0

プロダクションで手動で実行する場合(可能な場合)この例外はパスパラメータではなく、あなたが実行するコマンドであるということです。 – valignatev

+0

あなたは私がそれを理解したときにこの権利を投稿しました。私は、ビルド環境に不用意なものをインストールするのを忘れていました。それがまた問題かもしれないことをどうやって知ったのですか?私はそれが私に言っていたものだと思ったので、同じ行を何度も何度も過ごす時間を費やす。 – deltaskelta

+0

私は答えでそれを説明しようとした。 – valignatev

答えて

2

理由:実行コマンドが存在しないファイルを実行できません。あなたの例ではlameです。お見積もりdoc section

最も一般的な例外はOSErrorです。これは、存在しないファイルを実行しようとするときなどに発生します。アプリケーションはOSError例外を準備する必要があります。

_execute_childのソースコードをsubprocess.pyの最後にチェックすることもできます。

関連する問題