Say I have a multiline string for an environment variable
If I try to import that in a Rails config yml file, I'm going to have a bad time.
config: my_value: <%= ENV.fetch("MY_VAR") %>
If this config file is autoloaded, rails is going to blow up on startup:
YAML syntax error occurred while parsing config.yml. Please note that YAML must be consistently indented using spaces. Tabs are not allowed. Error: (<unknown>): could not find expected ':' while scanning a simple key at line 15 column 1 (Psych::SyntaxError)
This is happening because the ERB output is not writing the line breaks in a way that Psych (ruby YAML parser) knows how to handle. We can use
String#dump to return the quoted version of the string to make Psych happy.
"hi bye".dump => "\"hi\\nbye\""
So the resulting config would look like so:
config: my_value: <%= ENV.fetch("MY_VAR").dump %>
And then our app can start and in console:
Rails.configuration.config.my_value => "hi\nbye"