我正在使用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,或者我是否需要创建一个自己完成所有这些操作的盒式磁带。
答案 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),看看是否可以将其应用到自定义盒式磁带。