web-dev-qa-db-fra.com

rails 3, comment utiliser un fichier de configuration ENV dans un fichier Settings.yml?

Dans mon fichier settings.yml, j'ai plusieurs variables de configuration, dont certaines font référence à des variables ENV [].

par exemple, j'ai ENV ['FOOVAR'] est égal à WIDGET

Je pensais pouvoir référencer des vars ENV à l'intérieur de <%%> comme ceci:

Settings.yml:

default:
   cv1: Foo
   cv2: <% ENV['FOOVAR'] %>

dans Rails console si je tape

> ENV['FOOVAR']
=> WIDGET

mais

> Settings.cv1
=> Foo   (works okay)
> Settings.cv2
=>nil   (doesn't work???)
47
jpwynn

utiliser ce qui suit: -

 default:
       cv1: Foo
       cv2: <%= ENV['FOOVAR'] %>
66
Anubhaw

La solution ci-dessus n'a pas fonctionné pour moi. Cependant, j'ai trouvé la solution sur Comment utiliser les variables dans un fichier YAML?

Mon fichier .yml contenait quelque chose comme:

development:
gmail_username: <%= ENV["GMAIL_USERNAME"] %>
gmail_password: <%= ENV["GMAIL_PASSWORD"] %>

La solution ressemble à:

template = ERB.new File.new("path/to/config.yml.erb").read
processed = YAML.load template.result(binding)

Ainsi, lorsque vous introduisez une balise de scriptlet dans un fichier .yml, il s'agit davantage d'un modèle erb. Alors lisez-le d'abord comme un modèle erb, puis chargez le yml comme indiqué ci-dessus.

27
arpiagar

Utilisation <%= ENV['FOOVAR'] %> au lieu de <% ENV['FOOVAR'] %>.

Soyez conscient que cette approche ne fonctionnera que si tout ce qui analyse le fichier Yaml est configuré pour le traiter via Erb (par exemple, vous pouvez voir comment Mongoid fait exactement cela ). Cependant, il n'est pas universellement pris en charge dans les fichiers Yaml, cela dépend donc de la raison pour laquelle vous utilisez ce fichier Yaml.

24