4

似乎如果我使用如下命令:

rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file"

引用的目录变量永远不会扩展,因此我不能将它用于我的应用程序。有没有什么办法解决这一问题?

编辑

正如@timo.rieber 在他的回答中指出的那样,这是行不通的,因为变量是在本地解析的,没有任何价值。实际上:

$ rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file"
Setting environment variable(s) ... done
$ rhc env show VARIABLE
VARIABLE=/file

但是,如果我使用单引号来避免立即扩展:

$ rhc env set VARIABLE='$OPENSHIFT_DATA_DIR/file'
Setting environment variable(s) ... done
$ rhc env show VARIABLE
VARIABLE=$OPENSHIFT_DATA_DIR/file

有趣的是,即使显然这次它被正确设置,这也不能很好地工作(即当进程使用它时不会发生扩展)。

4

3 回答 3

3

问题解释:

的值$OPENSHIFT_DATA_DIR在您的本地计算机上得到解析。很可能它将为空,因为您的计算机上未设置此变量。

无法读取内置服务器端环境变量的值,例如$OPENSHIFT_DATA_DIR. 只会公开外部设置的变量。您可以通过以下示例进行尝试:

user@machine:~$ rhc env list

user@machine:~$ rhc env set VARIABLE="file"
Setting environment variable(s) ... done

user@machine:~$ rhc env list
VARIABLE=file

user@machine:~$ rhc env unset VARIABLE
Removing environment variables is a destructive operation that may result in loss of data.
VARIABLE

Are you sure you wish to remove the environment variable(s) above from application 'yourapp'?(yes|no):yes

Removing environment variable(s) ... done

user@machine:~$ rhc env list

解决方案:

设置两个环境变量并在程序代码中使用它们来构建路径:

1.定义第一个环境变量,定义内置环境变量读取

user@machine:~$ rhc env set MY_ENV_VAR_FOR_BASE_DIR="OPENSHIFT_DATA_DIR"
Setting environment variable(s) ... done

2. 定义第二个环境变量以在给定目录中指定您的文件夹

user@machine:~$ rhc env set MY_TARGET_FOLDER="file"
Setting environment variable(s) ... done

3. 在您的代码(python 示例)中构建您的路径

(InteractiveConsole)
>>> import os

>>> os.environ.get("MY_ENV_VAR_FOR_BASE_DIR")
'OPENSHIFT_DATA_DIR'

>>> os.environ.get("OPENSHIFT_DATA_DIR")
'/var/lib/openshift/your_user_dir/app-root/data/'

>>> os.environ.get("MY_TARGET_FOLDER")
'file'

>>> os.path.join(os.environ.get(os.environ.get("MY_ENV_VAR_FOR_BASE_DIR")), os.environ.get("MY_TARGET_FOLDER"))
'/var/lib/openshift/your_user_dir/app-root/data/file'
于 2014-10-13T12:54:19.580 回答
0

尽管这个问题已经很老了,但我想我会发布目前可能的解决方案。环境变量在 OpenShift pod 中的扩展有点像在 shell 中使用 $(VAR) 语法,所以你可以设置一个变量 DATABASE_URL 像;

oc set env dc service -e 'DATABASE_URL=mysql://user:pass@$(MARIADB_SERVICE_HOST):$(MARIADB_SERVICE_PORT)/dbname'

那么这些变量将在部署时得到扩展。

于 2017-02-03T22:31:17.603 回答
0

我记得运行“rhc env set ...”,但我的节点快速服务器仍然看到“未定义”,直到我运行“导出 FOO”。所以试试吧。

于 2015-09-14T01:42:29.420 回答