我有一个Rails应用程序,在使用Paypal进行交易之前加载了许多RSA证书。在我的开发机器上,这些证书是从文件系统中的文件中读取的,但是因为Heroku(我用于处理)很大程度上是只读的,所以我无法上传这些文件所以我猜我必须要从配置变量中读取证书(参见Heroku Config Vars)。
因为证书由多行数据组成,所以我不确定如何将它们设置为变量,即使这是可能的。有谁知道我怎么做或者能够提出另一种方法?
非常感谢, 埃迪
答案 0 :(得分:50)
我发现添加多行配置的一种简单方法是双引号,然后从我的本地环境回显它们
heroku config:add EC2_PRIVATE_KEY="$EC2_PRIVATE_KEY"
答案 1 :(得分:9)
我们需要做同样的事情。
您可以用双引号包装变量值:
bobvila@bobuntu:~/svnroot/app/myapp$ heroku config:add woodchuck="How much wood
> could a woodchuck chuck
> if a woodchuck could chuck wood"
Adding config vars and restarting myapp... done, v25
woodchuck: How much wood
could a woodchuck chuck
if a woodchuck could chuck wood
bobvila@bobuntu:~/svnroot/app/myapp$ heroku config
=== Config Vars for myapp
woodchuck: How much wood
could a woodchuck chuck
if a woodchuck could chuck wood
bobvila@bobuntu:~/svnroot/app/myapp$
如果您使用Foreman进行localhost开发,.env文件不支持多行变量,因此您需要在启动Foreman之前将其导出到shell
答案 2 :(得分:8)
如果要从文件内容中设置Heroku配置值,可以使用以下shell技巧:
$ heroku config:set SECRET_KEY="$(cat path/to/secret.key)"
可以通过在值周围加上引号来直接设置多行值:
$ heroku config:set SECRET_KEY='first line
> second line'
如果您使用Foreman在本地运行(现在为heroku local
),则它不支持多行变量。您必须首先使用某些东西将它们注入环境,例如envdir:
$ envdir my-env-dir heroku local
答案 3 :(得分:6)
答案 4 :(得分:3)
我的回答有点迟了但最近我遇到了同样的问题,多行环境问题。 Heroku上的变量。
我的解决方案是使用strict_encode64
:
encoded_secret = Base64.strict_encode64("my_multi_line_secret")
添加密钥:
$ heroku config:set SECRET_KEY='the encoded_secret string here'
在代码中,然后使用Base64.strict_decode64(ENV['SECRET_KEY'])
答案 5 :(得分:1)
如何使用NodeJS处理此问题的示例。将\\n
字符替换为\n
:
process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
取自: Escaping issue with firebase privateKey as a Heroku config variable