2011-12-17 9 views
2

開発サーバーから運用サーバーにdjangoプロジェクトを移動しようとしています。私は1つ(BIG)の例外を除いて、ほとんどすべてをアイロンで仕上げました。私は端末で(python manage.py shellを使用して)次のコードを実行するとうまく動作しますが、Apacheサーバ(mod_wsgi)を実行しても正常に動作しません。Apacheでサブプロセスを使用しているときに「コマンドが見つかりません」というエラーが発生しました。

マイコード:私は、端末を介して実行した後、私は私のログファイルncbi_error_log.logを見ると

... 
    blastn_cline = NcbiblastnCommandline(query=filepath, db=db, evalue=0.1, outfmt=5, out=out, task="blastn-short", dust="no") 
    process = subprocess.Popen(str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE) 
    proc_out, proc_err = process.communicate() 
    err_log = open('/Users/basehunt/logs/ncbi_error_log.log', 'a+') 
    err_log.write("\n"+str(datetime.datetime.now())+": "+str(proc_err)) 
    err_log.close() 
    ... 

私は(一例として)を取得:

2011-12-17 12:30:54.771292: 

のでエラーなし。私は私のapacheサーバを介して実行したときしかし、私が取得:

2011-12-17 12:28:59.755323: /bin/sh: blastn: command not found 

が、私はこの問題を解決するために広く検索しようとしていますが、修正を与える何かを見つけることができません - 私は紛れも何かが足りないのです願っていても明らかに私はこれをすぐに並べ替えることができます。

追加情報:

  • OS X Snow Leopardの

  • Pythonのバージョン2.7.2

  • ジャンゴ1.3

  • PATHは、BLASTN

  • とディレクトリが含まれています

ご覧になりたい追加コードがある場合は、お知らせください。

を解決:

process = subprocess.Popen(str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE) 

を変化させることにより

process = subprocess.Popen('/Users/basehunt/BLAST/ncbi-blast-2.2.25+/bin/'+str(blastn_cline),shell=True,stdout = subprocess.PIPE, stderr = subprocess.PIPE) 

に機能することが絶対指すために。どうもありがとう。あなたは、実行中のプログラムへのフルパス名を使用しなければならないのApache/mod_wsgiの下で実行されている、または任意のファイルは、そのことについてはアクセスされて

答えて

4

。これは、ユーザーのPATHが継承されていないか、Apacheで使用されていないためです。プロセスの現在の作業ディレクトリも何でもよいので、相対パスにも依存することはできません。

ので、代わりに単に「BLASTN」、使用「/いくつかの/パス/ BLASTN」は、プログラムが置かれている場所へのフルパスを「/ /いくつかの/パス」を交換します。

+0

こんにちはグラハム、これは多くのありがとう。私が解決策を示すために私の編集で言及したように、私は自分のパスに '/'だけでなく '/'を前置する必要がありました。これがなぜなのか分かりません。さらに、この質問に対する削除された答えに '/ bin/sh'をつぶすことについてのあなたのコメントはそうであった。それは本当に私のサーバーに絡み合い、私は救助のためにたくさんのセーブをしなければならなかった。また、modwsgiの素晴らしい仕事!再度、感謝します。 – rjralgar

+0

二重スラッシュは必要ありません。最初にコードを再読み込みしなかったときなど、何が起こっているのか分かりません。あなたが最初にダブルスラッシュを試みる理由を想像できません。ソースコードのリロードに関する問題については、http://code.google.com/support/bin/answer.py?answer =com/p/modwsgi/wiki/ReloadingSourceCode –

+0

完全に正しい - 私はソースコードを適切にリロードしていない、完全な愚かさ。私は最初にスラッシュなしでそれを書いたとは思っていませんでしたが、gitは私に言います(なぜ私は私が知りませんでした - 私の脳はこの/ bin/sh問題から揚げたと思います) 。とにかく、もう一度ありがとう。 – rjralgar

関連する問題