我们选择使用env vars来存储所需的信息,而不是在服务器上存储凭据文件:
GOOGLE_CLIENT_ID
GOOGLE_CLIENT_EMAIL
GOOGLE_ACCOUNT_TYPE
GOOGLE_PRIVATE_KEY
我们正在获得CalendarService
的授权,如下所示:
scopes = ["https://www.googleapis.com/auth/calendar"]
auth = ::Google::Auth.new_application_credentials(scopes)
service = ::Google::Apis::CalendarV3::CalendarService.new
service.authorization = auth
service.authorization.fetch_access_token!
流程的每个部分都在本地工作 - 授权,获取访问令牌,与API交互等。当我们在Heroku上部署到我们的登台环境时,我们无法解决以下错误:
Unable to read the credential file specified by GOOGLE_APPLICATION_CREDENTIALS: Neither PUB key nor PRIV key: nested asn1 error
我在测试中看到了这个错误,所以我知道它可以 与丢失的凭证文件(如错误表明) OR 与无效的id,私有密钥或电子邮件组合(因为我不小心用无效值替换了私钥)。在这种情况下,错误消息是相同的。
我们已经验证所有vars与本地使用的凭据相匹配 - 我缺少什么?
答案 0 :(得分:5)
确保您正确设置了GOOGLE_PRIVATE_KEY变量。
在Heroku上设置一个需要运行的多行配置变量:
heroku config:add GOOGLE_PRIVATE_KEY="$(cat private_key_file)"
答案 1 :(得分:1)
将密钥存储在新文件中并使用cat
的替代方法是使用printf
代替。
heroku config:add GOOGLE_PRIVATE_KEY="$(printf "-----BEGIN PRIVATE KEY.....")"