2014-09-04 46 views
0

我在AWS EC2 Ubuntu上有一個rails 4應用程序。它會使用反引號來調用python程序:

pyresult = `python /path/to/abc.py` 

python程序在我的本地開發中工作得很完美。但是在生產服務器上它失敗,沒有錯誤。 (pyresult爲空)

我已經調試了很久,發現了一個可能的原因:$ PYTHONPATH

在本地,我在我的.bashrc後續,如Python程序是否要添加:

export PYTHONPATH="$HOME/.local/lib/python2.7/site-packages/:$PYTHONPATH" 

在服務器上,我還將它們添加到服務器上的.bashrc中。但在我的應用程序中運行echo $PYTHONPATH會給我一個空字符串。

然後我在Rails應用程序明確添加,

`export PYTHONPATH="$HOME/.local/lib/python2.7/site-packages/:$PYTHONPATH"` 
    pyresult = `python /path/to/abc.py` 

但$ PYTHONPATH仍然是空的。並調用python程序仍然失敗,沒有錯誤。

猜猜缺少的$ PYTHONPATH導致該問題是否正確?如果是,如何解決問題?感謝您的幫助。(對不起,我是linux新手,並不熟悉python)

+0

這可能會在[另一個](http://stackoverflow.com/q/11648620/1563512)stackoverflow答案。你試過'ENV ['PYTHONPATH'] =「/ some/path:/ some/otherpath」;'? – zerodiff 2014-09-04 16:18:45

回答

0

使用Open4 gem運行命令後,我發現rootcause是paython程序找不到lib,它通過setup.py安裝。所以這是另一個問題。

0

Linux沒有系統變量,只有環境變量,它們只被子進程繼承。這條線

`export PYTHONPATH="$HOME/.local/lib/python2.7/site-packages/:$PYTHONPATH"` 

只設置PYTHONPATH由反引號啓動子shell(和任何進程從子shell啓動)。一旦外殼存在,PYTHONPATH的設置就消失了。

您需要使用任何設備Ruby有用於修改當前進程的環境,這是我收集(如人誰不使用Ruby)的

ENV['PYTHONPATH'] = '...' 

然後通過殼

開始
pyresult = `python /path/to/abc.py` 

將繼承其當前Ruby進程的值PYTHONPATH

+0

謝謝你的回覆。我試過了,但它不起作用。 ENV []是用於ruby應用程序,但不是由反引號啓動的子shell。 – Narco 2014-09-05 09:50:42

+0

在shell中,你應該簡單地將'$ PYTHONPATH'作爲一個變量來訪問。如果你希望改變子shell中的'PYTHONPATH'並*在Ruby應用程序中看到這種改變,那是不可能的。 – chepner 2014-09-05 13:10:55

+0

嗨Chepner,我已經使用了spawn({「PYTHONPATH」=>「/ my/path」},command})將PYTHONPATH包含在子shell中,並且將PYTHONPATH作爲環境變量。但不知何故,它仍然無法正常工作。看起來有些其他問題=,= Tks幫助。 – Narco 2014-09-07 06:29:31