我有一个数据库的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。
你可以在 database.yml
development_with_password:
adapter: mysql2
username:
password:
并在你的耙子任务中调用它,如
RAILS_ENV=development_with_password rails db:migrate
类似这样?你需要使用嵌套的 <% %>
标签,避开外层的标签。另外不要忘记引号。
username: <%%= ENV['diff_db_user'] || "<%= @node[:database][:username] %>" %>
password: <%%= ENV['diff_db_password'] || "<%= @node[:database][:password] %>" %>