Использование Figaro и Secrets.yml для управления переменными Env
У меня есть приложение rails 4.1, и я пытаюсь организовать переменные env. На данный момент у меня есть файл secretts.yml в моей папке config /. Я также установил камень Фигаро. Моя цель состояла в том, чтобы все мои переменные env были в файле application.yml (не проверен в git), а затем использовать файл secrets.yml (проверен в git) для сопоставления переменных из appliation.yml с приложением. Когда я печатаю файлы с помощью Rails.application.secrets, он просто показывает хэши, которые выглядят так:
:salesforce_username=>"ENV['SALESFORCE_USERNAME']"
Ни одна из моих внешних служб не работает с этой настройкой переменных env. Когда я просматриваю следы, фактически запросы ENV['ACCOUNT_ID'] передаются в таких запросах:
v2/accounts/ENV['ACCOUNT_ID']/envelopes
Кроме того, я не могу получить доступ к своим переменным env, используя Rails.application.secrets.account_id в моем приложении.
secrets.yml
development:
account_id: <%= ENV['ACCOUNT_ID'] %>
aplication.yml
development:
ACCOUNT_ID: "123456"
application.rb
# preload tokens in application.yml to local ENV
config = YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
config.merge! config.fetch(Rails.env, {})
config.each do |key, value|
ENV[key] = value.to_s unless value.kind_of? Hash
end
2 ответа
Драгоценный камень обеспечивает генератор:
$ rails generate figaro:install
Генератор создает файл config/application.yml и изменяет файл .gitignore, чтобы этот файл не помещался в репозиторий git.
Вы можете добавить переменные среды как пары ключ / значение в config/application.yml:
GMAIL_USERNAME: Your_Username
Переменные среды будут доступны в любом месте вашего приложения как переменные ENV:
ENV["GMAIL_USERNAME"]
Это дает вам удобство использования одних и тех же переменных в коде, независимо от того, установлены ли они оболочкой Unix или config/application.yml в геме figaro. Переменные в файле config/application.yml будут переопределять переменные среды, установленные в оболочке Unix.
В тестах или в других ситуациях, когда переменные ENV могут быть неподходящими, вы можете получить доступ к значениям конфигурации при вызове метода Figaro:
Figaro.env.gmail_username
Используйте этот синтаксис для установки различных учетных данных в средах разработки, тестирования или производства:
HELLO: world
development:
HELLO: developers
production:
HELLO: users
В этом случае, ENV["HELLO"]
будет производить "разработчиков" в разработке, "пользователей" в производстве и "мир" в противном случае.
Вы говорите, что переменные ENV "передаются в запросах", но когда я смотрю на ваши фрагменты кода, я думаю, что переменные вообще никогда не обнаруживаются как таковые.
Если вы хотите вставить переменную в строку, дважды проверьте, что вы используете следующий формат, особенно #
а также {}
:
important_string = "v2/accounts/#{ENV['ACCOUNT_ID']}/envelopes"
На более общем замечании, если вы не уверены, какие переменные среды задаются в данной среде, самый простой способ перепроверить это открыть консоль Rails и выполнить запрос ENV
вот так:
$ rails console
> puts ENV.keys # find out what ENV vars are set
=> (returns a long list of var names)
> puts ENV['DEVISE_PEPPER']
=> "067d793e8781fa02aebd36e239c7878bdc1403d6bcb7c380beac53189ff6366be"