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???)
utiliser ce qui suit: -
default:
cv1: Foo
cv2: <%= ENV['FOOVAR'] %>
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.
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.