【问题标题】:Ruby on Rails 4 on Heroku, Environment variables with backslash escapeHeroku上的Ruby on Rails 4,带反斜杠转义的环境变量
【发布时间】:2015-09-28 11:19:36
【问题描述】:

我有一个环境变量:

MY_VALUE: "EFINbA\u003d\u003d\n"

当我通过 ruby​​ 读取它时,它返回为:

ENV['MY_VALUE']
=> "EFINbA\\u003d\\u003d\\n"

...但仅在 Heroku 上,而不是在 Mac 上(诚然,它是通过 local_env.yml 文件设置的)

所以首先,我只是不明白它为什么要这样做。

其次,当我尝试删除 \ 并用 \ 替换它们时,我发现没有任何效果。

虽然: ENV['MY_VALUE'].gsub("\","x") => "EFINbAxu003dxu003dxn"

这个: ENV['MY_VALUE'].gsub("\","\")

... 不起作用,因为最后一个双引号被转义了,而:

ENV['MY_VALUE'].gsub("\\","\\")

...实际上什么都不做。

显然我在这里遗漏了一些基本的东西,而且我发现它已经太晚了。

谢谢。

【问题讨论】:

    标签: ruby-on-rails heroku environment-variables


    【解决方案1】:

    你可以试试 YAML 的 unescape

    require 'yaml'
    
    def unescape(s)
        YAML.load(%Q(---\n"#{s}"\n))
    end
    
    unescape(ENV['MY_VALUE'])
    

    或者如果你没有引入 yaml 模块,你可以使用eval

    def unescape(s)
        eval %Q{"#{s}"}
    end
    

    YAML 相对于eval 的优势在于它可能更安全。

    【讨论】:

    • 您,先生,拯救了我的夜晚。最后我选择了 eval,因为这个过程不受狡猾的输入的影响。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2014-09-16
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多