如何在 OpenShift 中达到 process.env.OPENSHIFT_REPO_DIR?

How to reach process.env.OPENSHIFT_REPO_DIR in OpenShift?

早期在 OpenShift Node.js 应用程序中,process.env.OPENSHIFT_REPO_DIR 环境变量可用。不,我迁移到 OpenShift 3,但出现错误。

var apn = require('apn');
var optionsP = {
    token: {
        key: process.env.OPENSHIFT_REPO_DIR + 'APNsAuthKey_AQ34EHZCDQ.p8',
        keyId: "AQ34EHZCDQ",
        teamId: "AQUJ3H44A4",
    },
    production: true,
};

var apnProviderP = new apn.Provider(optionsP);

/opt/app-root/src/node_modules/apn/lib/credentials/token/prepare.js:15
      throw new VError(err, "Failed loading token key");
      ^
VError: Failed loading token key: ENOENT: no such file or directory, open 'undefinedAPNsAuthKey_AQ34EHZCDQ.p8'
    at prepareToken (/opt/app-root/src/node_modules/apn/lib/credentials/token/prepare.js:15:13)
    at config (/opt/app-root/src/node_modules/apn/lib/config.js:42:31)
    at new Client (/opt/app-root/src/node_modules/apn/lib/client.js:11:19)
    at EventEmitter.Provider (/opt/app-root/src/node_modules/apn/lib/provider.js:12:19)
    at Object.<anonymous> (/opt/app-root/src/server.js:26:20)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)

有什么想法吗?

在 OpenShift 3 下,如果使用针对不同语言的捆绑 S2I 构建器,在大多数情况下,您的应用程序源代码将驻留在目录 /opt/app-root/src 中。没有指定目录的环境变量。

要确认目录是什么,您可以使用 oc rsh 在您的应用程序的容器中获取交互式 shell,然后 运行 pwd。通常默认目录是您的应用程序代码所在的位置。