2016-04-30 58 views
0

我已經用一個Python3.3設備在RedHat Openshift服務器上設置了一個Django應用程序。對於應用程序的前端部分,我需要幾個工具:less,typescript,google-closure-compiler,它應該與npm install <package>命令一起安裝。在Openshift上的Python齒輪安裝節點包

不幸的是它似乎並不可能,因爲在Openshift SSH控制檯命令的執行產生了權限錯誤:

npm ERR! Error: EACCES, mkdir '/var/lib/openshift/572240982d5271a20c0000e2/.npm' 
npm ERR! { [Error: EACCES, mkdir '/var/lib/openshift/572240982d5271a20c0000e2/.npm'] 
npm ERR! errno: 3, 
npm ERR! code: 'EACCES', 
npm ERR! path: '/var/lib/openshift/572240982d5271a20c0000e2/.npm' } 
npm ERR! 
npm ERR! Please try running this command again as root/Administrator. 

幸運我可以只下載編譯後的Java腳本安裝google-closure-compiler,但對於其他人來說,沒有備選的安裝方法記錄。

是否有可能以某種方式在Openshift中爲Python應用程序安裝這些包,以便在構建過程中可以在服務器上執行lessctsc編譯器?

回答

0

感謝以前提到過的非常類似的question,我已經想出瞭如何做到這一點,儘管可能不是最優化的方式。爲我工作的過程如下:

  1. 連接到通過SSH您的應用程序和變量指向設置環境與依賴的位置:
    export DEPENDENCY_BASE="$OPENSHIFT_HOMEDIR/app-root/dependencies"
  2. $DEPENDENCY_BASE/node下安裝的node.js最新/所需版本通過下載從official web site Linux二進制文件,並提取它:
    cd $DEPENDENCY_BASE; wget https://nodejs.org/dist/v4.4.3/node-v4.4.3-linux-x64.tar.xz; tar -xf node-v4.4.3-linux-x64.tar.xz; mv node-v4.4.3-linux-x64 node; rm node-v4.4.3-linux-x64.tar.xz
  3. 創建本地以下2個文件夾安裝npm經理:
    mkdir -p $DEPENDENCY_BASE/.npm $DEPENDENCY_BASE/node_modules/.bin
  4. 本地安裝的軟件包和node.js添加到PATH,使他們優先於全球的:
    export PATH="$DEPENDENCY_BASE/node_modules/.bin/:$DEPENDENCY_BASE/node/bin/:$PATH"
  5. 執行node --version; npm --version,以確保新版本現在使用
  6. 設置緩存文件夾對於npm的一個步驟3中創建的,我們有寫權限:
    npm config set cache "$DEPENDENCY_BASE/.npm"

現在要安裝每一個包有時間,下面的命令,應使用:
npm install --prefix $DEPENDENCY_BASE <package name> [1]

它將安裝在$DEPENDENCY_BASE/node_modules/夾包,而相應的二進制文件將在$DEPENDENCY_BASE/node_modules/.bin/文件夾鏈接。


顯然,同樣的結果可以在不安裝本地的node.js新版本可以實現,但安裝npm版本太舊了那裏,這很可能是缺少某些功能。


可以當然put命令1和4中的$OPENSHIFT_HOMEDIR/app-root/repo/.openshift/action_hooks/pre_build爲了使用命令[1]自動部署。更好的是,不是使用命令1,而是按照Openshift documentation中所述設置全局環境變量。

如果您希望在通過SSH連接時交互使用這些命令,不幸的是,最好的方法似乎是將它們放在bash腳本中並手動運行它。我找不到任何工作方式在登錄時加上$PATH變量,因爲之後它會被系統覆蓋。