OpenShift Custom Cartridge和NPM

时间:2014-09-28 15:15:11

标签: nginx npm openshift

我正在使用community-developed OpenShift cartridge来获取nginx。墨盒的构建脚本(没有任何修改)运行良好;它使用我提供的配置文件启动nginx服务器。但是,我正在尝试修改构建脚本,以便它首先将目录更改为我的OpenShift存储库,运行npm install然后grunt build以构建我已创建的Angular应用程序。

当我这样做时,当脚本到达EACCES, mkdir '/var/lib/openshift/xxxxxxxxxx/.npm'时,我会不断收到错误npm install。有些OpenShift forum posts试图解决这个问题,但似乎需要一个不同的解决方案(至少在我的情况下)。

因此,我感兴趣的是,是否有可能以这种方式使用npm,或者我是否需要创建一个自己完成所有这些操作的盒式磁带。

2 个答案:

答案 0 :(得分:3)

由于我们通常不需要创建~/.npm所需的访问权限,因此我们必须找到移动npm缓存(通常为~/.npm)和npm用户配置的方法(通常为~/.npmrc )到可访问的文件夹,以使事情进展。以下信息部分来自我在此问题上提交给Redhat的bug report

我们必须首先创建一个环境变量control the location of .npmrc。我在.env中创建了一个名为$OPENSHIFT_DATA_DIR的文件(对我的应用程序具有shell访问权限)。在这个文件中,我放置了:

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

这会将.npmrc目录移动到我们具有读/写权限的位置。当然,我还必须在.npmrc中创建目录$OPENSHIFT_HOMEDIR/app-root/build-dependencies/。然后,在我的预启动webhook /早期的构建脚本中,我放置了:

touch $OPENSHIFT_DATA_DIR/.env

这确保了每次部署/构建时都可以访问配置.npmrc位置的环境变量。现在我们可以移动npm缓存的位置。首先在touch文件上手动运行.env,然后在.npm中创建$OPENSHIFT_HOMEDIR/app-root/build-dependencies/目录。运行以下命令以完成重新配置:

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

即使我们不使用NodeJS盒式磁带,每次部署时都应该可以访问NPM。可以根据需要更改上述目录选项。

答案 1 :(得分:0)

您没有齿轮中〜/ .npm目录的写入权限。您可以尝试查看本机node.js盒式磁带的设置方式(https://github.com/openshift/origin-server/tree/master/cartridges/openshift-origin-cartridge-nodejs),看看是否可以将其应用到自定义盒式磁带。