我在RedHat Openshift服务器上使用一个Python3.3设备设置了一个Django应用程序。对于应用程序的前端部分,我需要几个工具:less,typescript,google-closure-compiler,它们应与npm install <package>
命令一起安装。
不幸的是,这似乎不可能,因为在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应用程序安装这些软件包,以便在构建过程中可以在服务器上执行lessc
和tsc
编译器?
答案 0 :(得分:0)
感谢之前提到的非常相似的question,我已经想出了如何做到这一点,尽管可能不是最优化的方式。对我有用的程序如下:
export DEPENDENCY_BASE="$OPENSHIFT_HOMEDIR/app-root/dependencies"
node.js
下安装最新/所需版本的$DEPENDENCY_BASE/node
: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
npm
经理创建以下2个文件夹:mkdir -p $DEPENDENCY_BASE/.npm $DEPENDENCY_BASE/node_modules/.bin
node.js
添加到PATH
,以便它们优先于全局软件包:export PATH="$DEPENDENCY_BASE/node_modules/.bin/:$DEPENDENCY_BASE/node/bin/:$PATH"
node --version; npm --version
以确保现在使用新版本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
版本相当陈旧,可能缺少某些功能。
您当然可以将命令1和4放在$OPENSHIFT_HOMEDIR/app-root/repo/.openshift/action_hooks/pre_build
中,以便使用命令[1]进行自动部署。更好的是,而不是命令1,按照Openshift documentation。
如果您希望在通过SSH连接时以交互方式使用这些命令,不幸的是,最好的方法似乎是将它们放入bash脚本并手动运行。我找不到任何工作方式在登录时添加$PATH
变量,因为之后系统会覆盖它。