我正在尝试处理heroku certs
命令的输出。 heroku toolbelt中的其他命令写入STDOUT,但是heroku certs
和heroku certs:info
之类的相关命令似乎没有写在ubuntu上我预期的任何地方。正常运行时输出:
$ heroku certs:info --app appname
Fetching SSL Endpoint changedname-3302.herokussl.com info for appname... done
Certificate details:
Common Name(s): *.domain.com
domain.com
...etc
尝试重定向或管道输出的输出:
$ heroku certs --app appname | grep ssl
$ heroku certs --app appname | cat
$ heroku certs:info --app appname | grep ssl
$ heroku certs:info --app appname 2>&1 | grep ssl
$ heroku certs:info --app appname &> /tmp/certs.info; cat /tmp/certs.info
$ heroku certs:info --app appname > /tmp/certs.info; cat /tmp/certs.info
其他heroku命令按预期工作:
$ heroku ps --app appname | grep web
=== web (1X): `node www`
web.1: idle 2013/10/12 05:44:15 (~ 10h ago)
$ heroku status --app appname | grep -i status
=== Heroku Status
这是一个应该报告的错误还是我遗漏的错误?
答案 0 :(得分:4)
我同样尝试捕获heroku certs
的输出,以便我们可以自动化DNS设置。
正如您所发现的,Heroku toolbelt脚本不会重定向任何certs
命令的输出。深入研究ruby实现,这就是“显示”方法的重写:
def display(msg = "", new_line = true)
super if $stdout.tty?
end
(https://github.com/heroku/heroku/blob/master/lib/heroku/command/certs.rb#L188)
如果它不认为它输出到/ dev / tty,它将不会打印任何内容。
作为一个快速黑客,我改为使用curl
等价物作为直接替换:
curl -n -s -X GET https://api.heroku.com/apps/my_app_name/ssl-endpoints -H "Accept: application/vnd.heroku+json; version=3"
-n
选项将使用curl来使用heroku
脚本已经使用的〜/ .netrc条目。输出是JSON,沿着这些行。
[
{
"cname":"xxxx-xxxx.herokussl.com",
"id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"name":"xxxx-xxxx",
"warnings":[],
"ssl_cert":{
"ca_signed?":true,
"cert_domains":[
"*.xxxxxxxx.com",
"xxxxxxxx.com"
],
"expires_at":"xxxx",
"issuer":"xxxx",
"self_signed?":false,
"starts_at":"xxxx",
"subject":"xxxx"
},
"ssl_cert_prev":null
}
]
根据您包装脚本的方式,这可能比heroku
输出更加可解析。