【问题标题】:Rails environment variables with Rack-Mini-Profiler带有 Rack-Mini-Profiler 的 Rails 环境变量
【发布时间】:2020-09-01 09:29:24
【问题描述】:

我试图了解当您在请求的基本 URL 上附加 ?pp=env 时,Rails 的“rack-mini-profiler”实际上是如何转储环境变量的。现在我的 Gemfile 已经配置了 gem 'dotenv-rails 并且我正在使用 .env.local 来填充一些测试变量。我的问题是,rack-mini-profiler 从哪里获取环境变量?在 Rails 应用程序中填充 env 变量有很多不同的方法,dotenv 就是其中之一。我一直在阅读 rack-mini-profiler 的源代码,但似乎找不到它。我在“profiler.rb”中看到了dump_env 函数,但我看不到这些环境变量是从代码中的何处或如何获取的。它仅通过使用键/值对的 do 循环来显示它们的打印。这是我正在使用的示例应用程序,您可以在此 URL 上查看环境变量:https://preprod.rtcfingroup.com/?pp=env 欣赏任何见解。真的试图在低层次上理解这一点。

【问题讨论】:

    标签: ruby-on-rails rack


    【解决方案1】:

    Miniprofiler 实际上并没有做任何事情,因为 Ruby 通过the ENV constant 公开环境变量,the ENV constant 是一个类似哈希的类。

    dump_env just iterates over them:

    body << "\n\nEnvironment\n---------------\n"
    ENV.each do |k, v|
      body << "#{k}: #{v}\n"
    end
    

    【讨论】:

    • 谢谢你。因此,要真正了解 ENV 常量,您只需了解 ruby​​ 应用程序用来填充 ENV 常量的所有不同方法。一个例子是 dotenv-rails gem。
    • 在进一步查看代码时,有一个部分打印“Rack Environment”并循环通过“env.each”。然后有一个部分打印“环境”并循环通过“ENV.each”。您能否澄清一下 ENV 与 env 在该类中公开的内容的区别?
    • ENV 是一组获取系统本身环境变量的访问器,所以它真的很像 getenv 等 c 函数的包装器。
    • 每个 Rack 应用程序(例如 Sinatra 和 Rails)都采用一个参数,即称为 env 的哈希值。它包含有关请求的信息,例如参数、标头和服务器配置。像 Rack-Mini-Profiler 这样的中间件将 env 哈希作为输入,然后在链中传递它,因此它也可以用于传递信息。一些像 Warden 这样的中间件会将自己注入到 env 中。
    • 谢谢。这有助于解释这一点。渴望从里到外了解这一点。当我在 shell 中键入 ENV 时,或者当我从“irb”中键入 ENV 时,我看不到那些在末尾的“?pp=env”中显示的模拟敏感 API 密钥 env 变量(上面的示例 URL) ,或在 rails app home 目录中的 .env.local 中。那是因为他们没有实例化与 rails 应用程序使用的相同的环境变量吗?有没有办法在 shell 中模仿它进行比较?
    猜你喜欢
    • 2012-07-26
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2014-07-02
    • 1970-01-01
    相关资源
    最近更新 更多