4

кажется, что если я использую команду типа:Переменная среды не расширяется в OpenShift

rhc env set VARIABLE="$OPENSHIFT_DATA_DIR/file" 

ссылочный переменная каталог никогда не расширяется, и в результате я не могу использовать его для моего приложения. Есть ли способ исправить это?

EDIT

Как отметил @ 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

Если вы попробовали несколько вариантов, используя двойные кавычки, одинарные кавычки и обратные отрезки (предварительное исполнение), прежде чем я отправил свой ответ, но не повезло. Вы пробовали мое предложение с помощью сценария профиля оболочки (например, '.bash_profile') для установки' GIT_SSH'? –

+1

~/.bash_profile не доступен для записи в openshift. Я, вероятно, рядом с обходным решением для моей более крупной проблемы (развертывание некоторых зависимостей из частного репозитория bitbucket), но это не представляется возможным. – giallu

+0

Прошло два года с момента публикации этого вопроса - есть ли обновление о том, как расширить переменные среды? –

ответ

2

Проблема Объяснение:

Значение $OPENSHIFT_DATA_DIR получает решен на локальном компьютере. Скорее всего, он будет пуст, так как эта переменная не установлена ​​на вашем компьютере.

Невозможно прочитать значения встроенных переменных среды на стороне сервера, таких как $OPENSHIFT_DATA_DIR. Экспортируются только внешние переменные. Вы можете попробовать это на следующем примере:

[email protected]:~$ rhc env list 

[email protected]:~$ rhc env set VARIABLE="file" 
Setting environment variable(s) ... done 

[email protected]:~$ rhc env list 
VARIABLE=file 

[email protected]:~$ 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 

[email protected]:~$ rhc env list 

Solution:

Установить две переменные среды и использовать их в вашем программном коде, чтобы построить свой путь:

1. Определите первый переменная среды для определения встроенной переменной среды для чтения

[email protected]:~$ rhc env set MY_ENV_VAR_FOR_BASE_DIR="OPENSHIFT_DATA_DIR" 
Setting environment variable(s) ... done 

2. Определить вторую переменную окружения, чтобы указать папку в данном каталоге

[email protected]:~$ rhc env set MY_TARGET_FOLDER="file" 
Setting environment variable(s) ... done 

3. В коде (питон пример) построить свой путь

(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' 
+0

Это хороший ответ, но я думаю, что не могу его использовать, если я не контролирую процесс, фактически использующий его. Фактически, переменная, которую я хотел установить, - это GIT_SSH, которая, в свою очередь, считывается и используется git для настройки своего соединения. – giallu

+1

Возможно, предлагаемое решение можно использовать в вашем удаленном '.bash_profile', чтобы перезаписывать/устанавливать' GIT_SSH' динамически. Я бы попробовал ... –

0

Вспоминаю работает " rhc env set ... ", но мой узел-экспресс-сервер все еще видел« неопределенный », пока я не запустил« export FOO ». Так что попробуй.

0

Хотя этот вопрос довольно старый, я решил, что опубликую, что, вероятно, является решением в настоящее время. Переменные среды расширяются в модулях OpenShift, как это было бы в оболочке с использованием синтаксиса $ (VAR), поэтому вы могли бы установить переменную DATABASE_URL like;

oc set env dc service -e 'DATABASE_URL=mysql://user:[email protected]$(MARIADB_SERVICE_HOST):$(MARIADB_SERVICE_PORT)/dbname' 

тогда эти переменные будут расширены при развертывании.