Rails秘密.值包含换行符的Yml



让我们假设我有一个config/secrets.yml文件,它包含:

development:
app_name: MyApp
secret: <%= ENV['SECRET_VALUE'] %>

如果我用换行符设置SECRET_VALUE,它将中断。例句:

export SECRET_VALUE=$(printf "hellonworld")

然后,当我启动我的铁路应用程序,我得到这个错误:

/usr/local/lib/ruby/3.0.0/psych.rb:457:in 'parse': (<unknown>): could not find expected ':' while scanning a simple key at line 4 column 1 (Psych::SyntaxError)

在调试问题时,我意识到ENV['SECRET_VALUE']的文字值在解析之前被添加到yaml文件中。。这意味着如果我想实现我想要做的事情,我必须做这样的事情:

export SECRET_VALUE=$(printf "|n hellon world")

这是有效的,但这是非常丑陋的,我不可能是唯一一个认为这种行为是荒谬的??有更好的方法吗?编辑:

我尝试在值周围添加引号:

development:
app_name: MyApp
secret: "<%= ENV['SECRET_VALUE'] %>"

"works"但是换行符被从字符串中删除…

root@4e4431bae32e:/app# rails console
Loading development environment (Rails 7.0.3)
irb(main):001:0> puts ENV['SECRET_VALUE']
hello
world
=> nil
irb(main):002:0> puts Rails.application.secrets[:secret]
hello world
=> nil

在我的用例中保留换行符是很重要的。

可以使用转义的引号字符串。对于String#dump, YAML的字符串格式与Ruby的超集非常相似:

development:
app_name: MyApp
secret: <%= ENV['SECRET_VALUE'].dump %>

相关内容

  • 没有找到相关文章

最新更新