在转义的erb标签中进行字符串插值处理

问题描述 投票:0回答:1

我有一个数据库的ERB(database.yml.erb)文件模板,用chef 11.10进行渲染。

我想在database.yml中得到一个输出(在chef中渲染后),如下图所示。

default: &default
  adapter: mysql2
  username: <%= ENV['diff_db_user'] || <username> %>
  password: <%= ENV['diff_db_password'] || <password> %>
  ...

在上面的yaml中,我希望得到以下值 <username><password> 代之以 @node[:database][:username] & @node[:database][:password]

所以,我想这样做的原因是,在运行像db migration这样的rake作业时,通过设置环境变量来使用不同的密码。

所以,我尝试了上面提到的使用转义erb标签的方法。如何在ERB中转义ERB标签? 但在输出的yml中,我可以看到数值并没有被替换,它只是打印了变量本身。

例如,我有一个erb这样的。

default: &default
      adapter: mysql2
      username: <%%= ENV['diff_db_user'] || @node[:database][:username] %>
      password: <%%= ENV['diff_db_password'] || @node[:database][:password] %>
      ...

我得到的输出是:

default: &default
  adapter: mysql2
  username: <%= ENV['diff_db_user'] || @node[:database][:username] %>
  password: <%= ENV['diff_db_password'] || @node[:database][:password] %>
  ...

所以,我想知道是否有其他的方法可以让它打印出来 就像我最初在上面提到的那样,当我使用了 template 在chef中把erb渲染成yml。

ruby-on-rails chef erb string-interpolation
1个回答
0
投票

你可以在 database.yml

development_with_password:      
  adapter: mysql2
  username: 
  password: 

并在你的耙子任务中调用它,如

RAILS_ENV=development_with_password rails db:migrate

0
投票

类似这样?你需要使用嵌套的 <% %> 标签,避开外层的标签。另外不要忘记引号。

username: <%%= ENV['diff_db_user'] || "<%= @node[:database][:username] %>" %>
password: <%%= ENV['diff_db_password'] || "<%= @node[:database][:password] %>" %>
© www.soinside.com 2019 - 2024. All rights reserved.