【问题标题】:Multi-line config variables in HerokuHeroku 中的多行配置变量
【发布时间】:2011-10-20 00:47:48
【问题描述】:

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

由于证书由多行数据组成,我不确定如何将它们设置为变量,或者即使这是可能的。有谁知道我该如何做到这一点或能够提出一种替代方法?

非常感谢, 埃迪

【问题讨论】:

    标签: configuration heroku


    【解决方案1】:

    我知道这是一种非常手动的方法,但对我有用的是将私钥粘贴到文本编辑器中,找到 \n 并将其替换为实际的换行符并将其粘贴为Heroku 中的环境变量。

    【讨论】:

      【解决方案2】:

      或者您可以直接转到 Heroku 仪表板的 Settings 选项卡,打开 Config Vars 并将其粘贴。

      简单易懂。

      【讨论】:

      • 谢谢。我粘贴了私钥,没有转义任何特殊字符,也没有做“\n”。像魅力一样工作。
      • @Arik 我也面临同样的问题——你能详细说明“做“\n””是什么意思吗?非常欣赏
      • @BKSpureon 我没有在行尾添加 \n
      【解决方案3】:

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

      process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
      

      取自: Escaping issue with firebase privateKey as a Heroku config variable

      【讨论】:

        【解决方案4】:

        如果要从文件内容中设置 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
        

        【讨论】:

        • 这在我的 Ruby 2.3.0 和 Rails 5.0.0 应用程序中不起作用。我将其隔离为多行环境变量,因为将其更改为单行有效。我得到一个心理解析错误。关于如何解决它的任何想法?
        • 这里有错误。在本地创建测试用例很容易。 /Users/hm/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/psych.rb:377:in 'parse': (<unknown>): mapping values are not allowed in this context at line 29 column 17 (Psych::SyntaxError) from /Users/hm/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/psych.rb:377:in 'parse_stream' from /Users/hm/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/psych.rb:325:in 'parse' from /Users/hm/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/psych.rb:252:in 'load' from /Users/hm/.rvm/gems/ruby-2.3.0@global/gems/railties-5.0.0/lib/rails/application.rb:391:in 'secrets'
        • 抱歉延迟响应...我不是 Ruby 开发人员,但您的堆栈跟踪表明 Rails 正在尝试解析 YAML 文件。这个答案中没有任何内容涉及编写代码甚至在任何地方都有一个 YAML 文件,所以我想这无关紧要吗?我建议查看 rails/application.‌​rb 以查看它尝试加载的 YAML 文件。
        • 感谢您的回复...我正在将 rails secret.yml 文件中的一些键设置为 env var,其中包含来自 cert.pem 文件的多行文本。事实证明,解析器与其他虚拟测试样本一起工作,但不是真正的cert.pem 文件(它破坏了解析器给出上述错误)。每个 Heroku 的解决方案是创建一个 .profile 文件,该文件将 env 写入磁盘上的一个文件,该文件在应用程序需要的地方读取。
        【解决方案5】:

        我的回答来得有点晚,但我最近在多行环境中遇到了同样的问题。 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'])对其进行解码

        【讨论】:

          【解决方案6】:

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

          heroku config:add EC2_PRIVATE_KEY="$EC2_PRIVATE_KEY"
          

          【讨论】:

          • 这对我很有用。这个答案对我也有帮助:stackoverflow.com/questions/2789319/… 您可以通过在存储多行 var 的文件上使用 cat 来设置 var。
          • testvar=$(cat myfile.txt)。然后heroku config:add EC2_PRIVATE_KEY="$testvar"
          • heroku config:add EC2_PRIVATE_KEY="$(cat privatekey.pem)"
          • 在 Heroku shell 中回显环境变量时会发生什么?输出中有空格还是实际换行符?
          【解决方案7】:

          我们需要做同样的事情。

          您可以将变量值用双引号括起来:

          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

          【讨论】:

            猜你喜欢
            • 2020-10-28
            • 2019-02-05
            • 1970-01-01
            • 1970-01-01
            • 2015-07-09
            • 2021-05-06
            • 2018-01-04
            • 1970-01-01
            • 2020-12-18
            相关资源
            最近更新 更多