似乎我使用的命令如下:
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
有趣的是,这不起作用(即当进程使用时不会发生扩展),即使这次正确设置也是如此。
答案 0 :(得分:2)
问题解释:
$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'
答案 1 :(得分:0)
我记得运行&#34; rhc env set ...&#34;,但我的节点快递服务器仍然看到&#39; undefined&#39;直到我跑出去#34;出口FOO&#34;。所以试试吧。
答案 2 :(得分: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'
然后这些变量将在部署时扩展。