4

CLI で libreoffice を使用して、Django 内で一部のドキュメントを PDF に変換しています。

これは私の見解です(また、モデルの保存方法で試しました):

outdir = '/'.join([settings.MEDIA_ROOT, 'pdf'])
command = ['libreoffice', '--headless', '--convert-to', 'pdf', '-outdir', outdir, form.instance.upload.path]
stdout, stderr = subprocess.Popen(command).communicate()

subprocess.Popenの代わりに次のことも試しました。

os.system("libreoffice --headless --convert-to pdf --outdir %s %s" % (outdir, instance.upload.path))                                                         

それから私はそれをチェックアウトします:

# quick check new file exists                                                                                                                                                
with open("%s/%s.pdf" % (outdir, os.path.splitext(instance.upload.name)[0])): pass

Web サイトでそれらを実行しても機能しません。PDF ファイルが生成されません。

つまり、これらのメソッドは両方とも、私のローカル環境でも、それらが含まれている関数が呼び出されたときにも機能します。$ python manage.py shell

問題は本番環境のみです。

  • ジャンゴ1.4
  • パイソン 2.7.3
  • サーバーのバージョン: Apache/2.2.22 (Ubuntu) サーバーのビルド: 2012 年 2 月 13 日 01:51:50 (ラックスペース)

このバグが発生している可能性があると思ったことに注意してください...

グラハムの次のような回避策(これを私の に追加しましたapache2.conf)は何も変わらないようです。

WSGIApplicationGroup %{GLOBAL}

私のシステム管理者のスキルはあまり良くありませんが、これを間違って行った可能性があり、完全に困惑しています。他のことや回避策のアドバイスや指示をいただければ幸いです。

4

2 に答える 2

1

mod_wsgiapache2プロセスから生成されたときは$PATH、シェルに定義されているものがないため、ファイル名だけでなく、バ​​イナリsubprocess.Popen絶対パス名を渡す必要があります。libreoffice/usr/bin/libreoffice

于 2012-11-07T19:37:03.557 に答える