У меня есть ряд новомодных сценариев, сгенерированных диспетчером от Procfile, для запуска моего веб-сервиса и асинхронного рабочего очереди задачи. Путем диспетчер генерирует сценарии, следующие:
где "сеть приложения" и "рабочий приложения" установлены запуститься на стартовом "приложении", и "app-web-1" и "app-worker-1" установлены запуститься в стартовой "сети приложения" и "рабочем приложения" соответственно. Насколько я понимаю эта структура должна позволить Вам легко добавлять дальнейшие веб-и рабочие процессы, когда загрузка увеличивается, все еще управляя всем этим от задания "приложения" верхнего уровня.
Так, я хочу установить различные переменные среды в своих заданиях. Я могу, конечно, поместить их непосредственно в сценарии нижнего уровня, но было бы лучше поместить их в верхний уровень, таким образом, они только должны быть определены однажды. Я думал, что смогу сделать это в app.conf путем простого использования env
и export
:
env FOO=bar
export FOO
но это, кажется, не работает: хорошо, если я поместил его в среднее "веб-приложением" задание, но если я вставил "приложение" верхнего уровня, это не становится наследованным нижним уровнем "app-web-1". Так, моя вторая попытка состояла в том, чтобы поместить это в сценарий верхнего уровня и затем попытаться реэкспортировать в среднем только с export FOO
, но это не работает также.
Действительно ли возможно сделать то, что я хочу, или я должен просто согласиться на определение переменных в нескольких местах?
Можно сделать это двумя способами: export
переменная в среднем сценарии или сохраняет его в файле и получает его в самом низком сценарии.
Я протестировал этот пример на lubuntu 12.04:
myapp.conf является основным сценарием и экспортом MYAPP_FOO
переменная:
# myapp -
description "export environment variable"
env MYAPP_FOO=bar
export MYAPP_FOO
task
console log
script
exec echo "$MYAPP_FOO - myapp"
end script
приложение-web.conf является средним сценарием, которые экспортируют переменную родителя и определяют и экспортируют MYAPP_FOO1
# app-web -
description "export environment variable"
start on starting myapp
env MYAPP_FOO1=bar1
export MYAPP_FOO1
export MYAPP_FOO
task
console log
script
exec echo "$MYAPP_FOO - app-web - $MYAPP_FOO1"
end script
Наконец приложение-web1.conf печатает переменную:
# app-web1 -
description "export environment variable"
start on starting app-web
task
console log
script
exec echo "$MYAPP_FOO - app-web1 - $MYAPP_FOO1"
end script
Я использовал sudo start myapp
и результат в /var/log/upstart/app-web1.log
:
bar - app-web1 - bar1
Другой подход должен определить Вашу переменную в файле и получить его, где Вам нужно:
# app-web1 -
description "export environment variable"
start on starting app-web
task
console log
script
. /path/where/you/want/environmentFile
exec echo "$MYAPP_FOO - app-web1 - $MYAPP_FOO1"
end script
Или можно создать environmentFile
в среднем сценарии:
# app-web -
description "export environment variable"
start on starting myapp
env MYAPP_FOO1=bar1
task
console log
script
env | grep MYAPP_ > /path/where/you/want/environmentFile
exec echo "$MYAPP_FOO - app-web - $MYAPP_FOO1"
end script