2014-09-28 83 views
0

我正在爲nginx使用community-developed OpenShift cartridge。墨盒的構建腳本(沒有任何修改)效果很好;它使用我提供的配置文件啓動nginx服務器。但是,我試圖修改構建腳本,以便它首先將目錄切換到我的OpenShift存儲庫,運行npm install,然後grunt build構建我創建的Angular應用程序。OpenShift自定義墨盒和NPM

當我這樣做時,當腳本到達npm install時,我不斷得到錯誤EACCES, mkdir '/var/lib/openshift/xxxxxxxxxx/.npm'。一些OpenShift forum posts已經試圖解決這個問題,但似乎需要一個不同的解決方案(至少在我的情況下)。

因此,我對是否有可能以這種方式使用npm感興趣,或者如果我需要創建一個可以自己完成所有這些操作的盒式磁帶,

+0

如果你有第二個可以閱讀一個[類似問題](http://stackoverflow.com/questions/26830194/npm-install-on-openshift-jenkins-gear)我與Jenkins和NPM在OpenShift?先謝謝你。 – OceanLife 2014-11-09 16:10:34

回答

3

由於我們通常不具備創建~/.npm所需的訪問,我們必須找到移動故宮緩存(通常~/.npm)和NPM用戶配置(通常~/.npmrc)來訪問的文件夾來得到的東西去的方式。以下信息部分來自我提交給Redhat的bug report

我們必須先創建一個環境變量control the location of .npmrc。我在$OPENSHIFT_DATA_DIR中創建了一個名爲.env的文件(通過shell訪問我的應用程序)。在這個文件中,我把:

export NPM_CONFIG_USERCONFIG=$OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npmrc 

這使.npmrc目錄的地方,我們有特權的讀/寫的地方。當然,我還必須在$OPENSHIFT_HOMEDIR/app-root/build-dependencies/中創建目錄.npmrc。然後,在我提前啓動網絡掛接/在我的構建腳本年初,我把:

touch $OPENSHIFT_DATA_DIR/.env 

這確保配置的.npmrc的位置將是可訪問的每個我們部署/編譯時間環境的變量。現在我們可以移動npm緩存的位置。首先手動運行.env文件中的touch,然後在$OPENSHIFT_HOMEDIR/app-root/build-dependencies/中創建.npm目錄。執行以下操作以完成重新配置:

npm config set cache $OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npm 

即使我們未使用NodeJS盒式磁帶,每次部署時都應該可以訪問NPM。上述目錄選項可根據需要進行更改。

0

您不具備對設備中的〜/ .npm目錄的寫入權限。您可以嘗試查看設置本地node.js盒式磁帶的方式(https://github.com/openshift/origin-server/tree/master/cartridges/openshift-origin-cartridge-nodejs)並查看是否可以將其應用於您的自定義盒式磁帶。

+0

我在看這個,但是我對安裝腳本是否有權執行諸如「touch」$ OPENSHIFT_HOMEDIR「/。npmrc」的許可感到困惑。我也沒有權限這樣做。 – nmagerko 2014-09-29 23:56:51

+0

墨盒和他們的腳本可以訪問,但是當你使用ssh時,你的.openshift/action_hooks不會。 – 2014-09-30 00:29:43

+0

通過適量的重新配置,似乎我們可以解決此問題(至少對於npm)。請參閱下面的答案 – nmagerko 2014-10-01 21:18:17