如何在 Rails 应用程序中查看 ENV 变量?

Posted

技术标签:

【中文标题】如何在 Rails 应用程序中查看 ENV 变量?【英文标题】:How do I see the ENV vars in a Rails app? 【发布时间】:2016-06-12 19:28:09 【问题描述】:

我正在接管一个旧的 Rails 应用程序。一年来没有人碰过它。最后一位开发人员于 2015 年 4 月离开,我无法联系到他。我确实可以通过 ssh 访问服务器,并且可以访问 Github 存储库。

我不知道任何用户名/密码。

如果我通过 ssh 连接到服务器并 cat 访问 database.yml 文件,我会看到如下内容:

  staging:
        adapter: mysql2
        encoding: utf8
        pool: 5
        socket: /var/lib/mysql/mysql.sock
        database: o_wawa_stage
        username: wawa_stage
        password: <%= ENV['STAGE_DATABASE_PASSWORD'] %>
        host: access.dmedia.com

如果我运行“printenv”命令,那么我看不到任何这些变量。我假设它们仅由 Rails 环境加载。

我想我可以编辑模板以使用一堆“put”语句吐出值,但我认为必须有一种更明显的方法来做到这一点,而不是打印公众可以看到的数据它?

如果我尝试运行“rails 控制台”,我会得到:

  Rails Error: Unable to access log file. Please ensure that /var/www/haha/production/releases/20150118213616/log/development.log exists and is writable (ie, make it writable for user and group: chmod 0664 /var/www/haha/production/releases/20150118213616/log/development.log). The log level has been raised to WARN and the output directed to STDERR until the problem is fixed.

我在这个盒子上没有 sudo,所以我无法解决这个错误。

【问题讨论】:

【参考方案1】:

假设是暂存环境,正如您的示例所指出的那样。您需要通过将 RAILS_ENV 环境变量添加到 rails console 命令来加载控制台。

RAILS_ENV=staging rails console

这应该能让你进入。进入后,你可以直接访问ENV 变量。

2.2.2 (main):0 > ENV

这将为您转储环境变量。请注意,您的提示可能看起来不同。如果你想访问一个特定的值,比如数据库密码,你可以:

2.2.2 (main):0 > ENV['STAGE_DATABASE_PASSWORD']

【讨论】:

有没有办法告诉“rails 控制台”在哪里可以找到日志?日志位于“/var/www/wawa/production/shared/log”,但 Rails 控制台正在“/var/www/wawa/production/log”中查找它,但由于找不到它而引发错误. 查看 config/application.rb 和 config/enivornments/production.rb 中的任何类似于 config.logger 的行。它通常位于覆盖日志配置的这两个文件之一中。 guides.rubyonrails.org/configuring.html 也可能有帮助。【参考方案2】:

在您的应用目录中,只需启动 Rails 控制台:

rails c

然后在提示符处:

ENV

这将列出您上次导出的环境的所有已加载环境变量。

抱歉,发布此消息后,我意识到作者已经尝试使用带有错误的 rails 控制台...但我相当确定这应该始终有效。您不能在控制台中要求 printenv 或 env,您必须使用全部大写“ENV”

【讨论】:

【参考方案3】:

yourapp/config/env.yml 或 application.yml 等...

寻找类似的代码

AWS_KEY_ID: blahblah23rkjewfojerflbah
AWS_SECRET_KEY_ID: blahblah2394082fkwejfoblah

【讨论】:

只有在我们使用 Figaro gem 时才会这样,是吗? 这不返回任何内容: find 。 -name application.yml 这不返回任何内容: find 。 -name env.yml "find . -name *.yml" 返回超过 100 个文件,但名称中没有包含“application”或“env”。 是的 figaro 或 envyous,尽管如果前一个开发人员使用 ENV 变量,它们必须存储在某个地方,除非代码被推送到 github,当 .yml 文件位于 . gitignore

以上是关于如何在 Rails 应用程序中查看 ENV 变量?的主要内容,如果未能解决你的问题,请参考以下文章

根据当前 Rails.env 配置变量

在添加/删除 ENV 变量时,Elastic Beanstalk 导致我的 Rails 6 应用程序预编译资产中断

如何在database.yml文件中设置rails环境变量?

.env 未使用 rspec 在 Rails 的测试环境中加载

Rails Rake ENV 变量始终为空

Rails不会替换database.yml中ENV的值