在Openshift Python中安装节点模块

时间:2016-07-04 22:05:12

标签: node.js npm openshift

我在Openshift中有一个Python应用程序,包含Python 3.3和PostgreSQL盒式磁带。 Python盒式磁带运行Django 1.8,基于网站上的模板。

最近,我开始使用Gulp自动化我的构建,虽然它在我的本地机器上工作得很好,但我无法弄清楚如何在Openshift中使用它。我安装了django-gulp所以只要我使用runserver它就会运行,但是Openshift服务器显然没有安装gulp或任何插件,因此不会做任何事情。不过,我不知道如何在服务器上安装它们。

包含package.json不会做任何事情。我测试了它,如果我使用节点盒,它可以正常工作,但我有一个Python。

由于npm在服务器上,我尝试了SSH并手动运行npm install,但它引发了一个拒绝权限错误。

1 个答案:

答案 0 :(得分:0)

所以,在尝试了一段时间之后,我终于想出了一个解决方案。这有点令人费解,但确实有效:

  1. 安装您自己的Node和npm。 Openshift中包含的版本已经过时了,并没有真正起作用。 SSH到您的服务器并在您的依赖项文件夹中安装本地版本。 cd $OPENSHIFT_HOMEDIR/app_root/dependencies; wget https://nodejs.org/dist/v6.3.0/node-v6.3.0-linux-x64.tar.xz; tar xf node-v6.3.0-linux-x64.tar.xz; rm node-v6.3.0-linux-x64.tar.xz安装开发版。不要安装稳定版本,因为它会烧掉你的inode,而不是别的。
  2. 更改PATH以包含新节点版本export PATH="$OPENSHIFT_HOMEDIR/app_root/dependencies/node_modules/.bin/:$OPENSHIFT_HOMEDIR/app_root/dependencies/node/bin/:$PATH"每当您断开与服务器的连接时,环境变量都会重置。您可以使用rhc env set永久更改它们,但由于这仅在部署之前使用,因此我建议您将其添加到/.openshift/action_hooks/pre_build
  3. 您还需要更改NPM_CONFIG_USERCONFIG变量。 export NPM_CONFIG_USERCONFIG=$OPENSHIFT_HOMEDIR/app-root/build-dependencies/.npmrc。我再次建议在pre_build hook中执行此操作。
  4. 此时,您可以更改缓存而不会收到权限被拒绝错误。 npm config set cache "$OPENSHIFT_HOMEDIR/app_root/dependencies/.npm
  5. 您现在终于可以使用npm install了!安装所需的软件包。使用--prefix标志安装到node_modules文件夹。
  6. 但是,要使用gulp,您需要在您正在呼叫的地方安装gulp模块,因此npm install gulp没有前缀标记。
  7. 您现在可以致电gulp了!但是,除非编辑gulpfile链接到已设置的依赖项文件夹,否则gulpfile将无法找到模块。因此,require('gulp-cssnano')取代require([OPENSHIFT_HOMEDIR]/app_root/dependencies/node_modules/gulp-cssnano),而不是from rest_framework.serializers import ModelSerializer class UserSerializer(ModelSerializer): class Meta: model = User def create(self, validated_data): user = User(**validated_data) # Hash the user's password. user.set_password(validated_data['password']) user.save() return user 。我为Openshift保留了一个单独的gulp文件以保持我的理智。
  8. 使用pre_build中的新gulpfile调用gulp。