Ruby on Rails: можно ли поместить код Ruby в файл конфигурации YAML?

Я хотел бы сделать что-то вроде этого в своем amazon_s3.yml файле конфигурации:

access_key_id: ENV['S3_KEY']
secret_access_key: ENV['S3_SECRET']

... но я знаю, что это не работает. Не уверенный, если это даже возможно, но можно ли поместить код Ruby в файл YAML?

38
задан Ciro Santilli 新疆改造中心法轮功六四事件 26 November 2014 в 20:07
поделиться

2 ответа

Не нормально / напрямую. Я говорю это, потому что для использования результатов Ruby вам нужно сначала использовать что-то вроде ERB, прежде чем загружать файл. Что касается кода, вам нужно перейти от чего-то вроде:

loaded_data = YAML.load_file("my-file.yml")

или даже

loaded_data = YAML.load(File.read("my-file.yml"))

To:

loaded_data = YAML.load(ERB.new(File.read("my-file.yml")).result)

В этом конкретном случае вам нужно будет посмотреть, что загружает файл - в некоторых случаях, он может быть уже разработан для загрузки прямо из среды, или вам может потребоваться следующее:

  1. Monkey Исправьте код
  2. Fork + Используйте вашу собственную версию.

Так как есть несколько плагинов, которые используют amazon_s3.yml, возможно, стоит опубликовать, какую библиотеку вы используете, которая его использует - в качестве альтернативы, я считаю, из быстрого Google, что библиотека AWS позволяет вам определять AMAZON_ACCESS_KEY_ID и AMAZON_SECRET_ACCESS_KEY как env vars и заберет их из коробки.

65
ответ дан 27 November 2019 в 03:26
поделиться

Можно, если он интерпретируется через ERB, и в этом случае он действует как представление ERB, а код Ruby находится между <% и %>

Попробуйте:

access_key_id: <%= ENV['S3_KEY'] %>
secret_access_key: <%= ENV['S3_SECRET'] %>

... и посмотрите, работает ли

12
ответ дан 27 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: