Heroku中的多行配置变量

Edd*_*ton 47 configuration heroku

我有一个Rails应用程序,在使用Paypal进行交易之前加载了许多RSA证书.在我的开发机器上,这些证书是从文件系统中的文件中读取的,但是因为Heroku(我用于处理)很大程度上是只读的,所以我无法上传这些文件所以我猜我必须要从配置变量中读取证书(参见Heroku Config Vars).

因为证书由多行数据组成,所以我不确定如何将它们设置为变量,即使这是可能的.有谁知道我怎么做或者能够建议另一种方法?

非常感谢,艾迪

dan*_*yer 53

我发现添加多行配置的一种简单方法是双引用它们然后从我的本地环境中回显它们

heroku config:add EC2_PRIVATE_KEY="$EC2_PRIVATE_KEY"
Run Code Online (Sandbox Code Playgroud)

  • `heroku config:添加EC2_PRIVATE_KEY ="$(cat privatekey.pem)"` (36认同)
  • `testvar = $(cat myfile.txt)`.然后`heroku config:添加EC2_PRIVATE_KEY ="$ testvar"` (9认同)
  • 这对我很有用.这个答案对我也有帮助:http://stackoverflow.com/questions/2789319/file-content-into-unix-variable-with-newlines你可以通过在存储多个文件的文件上使用cat来设置var -line var. (4认同)

Jud*_*y2K 11

如果要从文件内容中设置Heroku配置值,可以使用以下shell技巧:

$ heroku config:set SECRET_KEY="$(cat path/to/secret.key)"
Run Code Online (Sandbox Code Playgroud)

可以通过在值周围加上引号来直接设置多行值:

$ heroku config:set SECRET_KEY='first line
> second line'
Run Code Online (Sandbox Code Playgroud)

如果您使用Foreman在本地(现在heroku local)运行,它不支持多行变量.您必须首先使用某些东西将它们注入环境,例如envdir:

$ envdir my-env-dir heroku local
Run Code Online (Sandbox Code Playgroud)


小智 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$ 
Run Code Online (Sandbox Code Playgroud)

如果您使用Foreman进行本地主机开发,则.env文件不支持多行变量,因此您需要在启动Foreman之前将其导出到shell


小智 7

我的回答来得有点晚,但我最近在多行环境中遇到了同样的问题。Heroku 上的变量。我的解决方案是使用strict_encode64

encoded_secret = Base64.strict_encode64("my_multi_line_secret")
Run Code Online (Sandbox Code Playgroud)

添加密钥:

$ heroku config:set SECRET_KEY='the encoded_secret string here'
Run Code Online (Sandbox Code Playgroud)

在代码中,然后使用 Base64.strict_decode64(ENV['SECRET_KEY'])


Eug*_*hov 7

如何使用 NodeJS 处理此问题的示例。\\n通过将字符替换为以下内容来清理该值\n

process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
Run Code Online (Sandbox Code Playgroud)

摘自: 使用 firebase privateKey 作为 Heroku 配置变量的转义问题


Jam*_*tes 6

或者您可以转到Heroku仪表板的"设置"选项卡,打开" 配置变量"并将其粘贴到其中.

Heroku设置

十分简单.

  • 谢谢。我粘贴私钥时没有转义任何特殊字符,也没有执行“\n”。工作起来就像一个魅力。 (2认同)