Как передать переменные среды для проверки кухни в .kitchen.yml

Я пытаюсь разработать поваренную книгу, чтобы приложение фляги работало с пушками и nginx. Я добился успеха до такой степени, что приложение работает очень хорошо с локальной базой данных sqlite, см. мою кулинарную книгу по адресу https://github.com/harrywang/flasky-cookbook. Приложение flask использует переменные среды для отправки электронных писем, таких как: MAIL_USERNAME = os.environ.get('MAIL_USERNAME'), как я могу передать эти переменные среды на виртуальные машины Ubuntu, используя тестовую кухню во время сходимости кухни?


person dami.max    schedule 25.01.2016    source источник
comment
ПРИМЕЧАНИЕ: при использовании env в gunicorn.conf должны использоваться env MAIL_USERNAME="AKIAJ6NFIS3" двойные кавычки - одинарные кавычки не работают, а при использовании --env работают одинарные кавычки - для безопасности: всегда используйте двойные кавычки.   -  person dami.max    schedule 28.01.2016


Ответы (2)


Невозможно передать переменные среды с помощью файла конфигурации .kitchen.yml (см. выпуск test-kitchen/test-kitchen#662).

Я рекомендую вам установить переменные среды в gunicorn.conf.erb с использованием --env:

exec gunicorn --env SECRET_KEY=<%= @secret_key %> --env [...] --workers 3 --bind unix:<%= node['flasky-cookbook']['gunicorn_socket'] %> -m 007 --log-file <%= node['flasky-cookbook']['gunicorn_logfile']%> manage:app
person zuazo    schedule 26.01.2016
comment
Я пробовал exec gunicorn --env MAIL_SERVER='email-smtp.us-east-1.amazonaws.com',MAIL_USERNAME='',MAIL_PASSWORD='-redacted-',FLASK_ADMIN='-redacted-' --workers 3 --bind unix:<%= node['flasky-cookbook']['gunicorn_socket'] %> -m 007 --log-file <%= node['flasky-cookbook']['gunicorn_logfile']%> manage:app, но не работал - я kitchen login и printenv, но не вижу эти переменные env. Любая мысль? - person dami.max; 26.01.2016
comment
@coderanger Я не думаю, что это совсем неправильно. Я знаю, что вы можете читать переменные ENV из файла .kitchen.yml, но я говорил о другой части проблемы: передаче переменной в приложение. Я предположил, возможно, ошибочно, что он знает, как делать первую часть. Если вы все еще думаете, что этот ответ неверен, я удалю его. - person zuazo; 26.01.2016
comment
@harryw похоже, что вы также можете использовать env для установки переменных среды. Эти переменные будут определены только внутри приложения, запущенного с помощью gunicorn. Не в вашей кухонной раковине. - person zuazo; 26.01.2016
comment
Я в основном имел в виду первую часть, вы можете абсолютно точно передавать переменные окружения. - person coderanger; 26.01.2016
comment
Хорошо, @coderanger. Спасибо. Я удалил первую часть. Я этого не знал, извини. Я знаю, твой ответ лучше :-P - person zuazo; 26.01.2016
comment
@zuazo большое спасибо за вашу помощь. как я могу проверить, что эти переменные env были успешно переданы, если я не могу использовать printenv? Является ли мой способ передачи нескольких переменных env, соединив их запятой, правильным? Я спрашиваю, потому что я не мог заставить работать функцию электронной почты flasky :(. - person dami.max; 26.01.2016
comment
@harryw Добро пожаловать ;-) Вы можете получить pid процесса gunicorn и посмотреть файл его окружения в /proc. Например: cat /proc/$(pidof gunicorn)/environ. Для переменных попробуйте передать несколько параметров --env или использовать несколько строк env SECRET_KEY="..." перед вызовом gunicorn. - person zuazo; 26.01.2016

Вы можете использовать форматирование Erb в своем .kitchen.yml:

provisioner:
  name: chef-solo
  attributes:
    mycookbook:
      mail_username: <%= ENV['MAIL_USERNAME'] %>

А затем используйте node['mycookbook']['mail_username'] в своем рецепте, чтобы передать значение приложению.

person coderanger    schedule 26.01.2016
comment
Я в замешательстве: как я могу использовать node['mycookbook']['mail_username'] в вашем рецепте, чтобы передать значение приложению? Ваше решение передает переменные env моего хоста (macbook pro) в гостевую (экземпляр виртуального ящика ubuntu)? Я очень новичок в Chef - извините, если задаю глупые вопросы :) - person dami.max; 26.01.2016
comment
Вам нужно разветвить flasky поваренную книгу и добавить что-нибудь в этот файл шаблона: github.com/harrywang/flasky-cookbook/blob/master/templates/, чтобы установить переменную среды. - person coderanger; 26.01.2016
comment
Также проверьте github.com/poise/application_python /blob/master/test/cookbooks/ для более простого примера развертывания Flask. - person coderanger; 26.01.2016
comment
большое спасибо за твою помощь. добавление чего-либо в шаблон похоже на решение, данное zuazo. Кулинарная книга приложения кажется отличной, но знаете ли вы какие-нибудь подробные руководства по этому поводу? README слишком краток для таких новичков, как я. - person dami.max; 26.01.2016