如何在 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 变量?的主要内容,如果未能解决你的问题,请参考以下文章
在添加/删除 ENV 变量时,Elastic Beanstalk 导致我的 Rails 6 应用程序预编译资产中断
如何在database.yml文件中设置rails环境变量?