我试图用Azure测试Chef。我已经安装了刀蔚蓝宝石并运行knife configure
。
之后我已经下载了我的发布设置文件并将其添加到了knife.rb中,如下所示:
knife[:azure_publish_settings_file] = "C:\chef\.chef\Visual Studio Ultimate com MSDN-Windows Azure MSDN - Visual Studio Ultimate-9-25-2014-credentials.publishsettings"
然后我跑了:
knife azure image list
我收到了这个错误:
ERROR: Unable to find file - Cef.chefVisual Studio Ultimate com MSDN-Windows Azure MSDN - Visual Studio Ultimate-9-25-2014-credentials.publishsettings
我遇到了这个错误。有人知道为什么会这样吗?
答案 0 :(得分:1)
在ruby中(与许多语言一样)\
用于表示下一个字符。
您的日志非常清楚,它会搜索没有文件分隔符的文件。
3个解决方案:
使用两次\\
转义反斜杠,你的行变为knife[:azure_publish_settings_file] = "C:\\chef\\.chef\\Visual Studio Ultimate com MSDN-Windows Azure MSDN - Visual Studio Ultimate-9-25-2014-credentials.publishsettings"
改为使用unix分隔符/
,您的行变为knife[:azure_publish_settings_file] = "C:/chef/.chef/Visual Studio Ultimate com MSDN-Windows Azure MSDN - Visual Studio Ultimate-9-25-2014-credentials.publishsettings"
使用单引号作为字符串以避免插值,反斜杠会失去其特殊含义。
我偏爱第二个。
正如mtm评论的那样,单引号在处理静态字符串时非常有用,而且它在ruby中是首选的样式。