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

31

我正在接手一个旧的Rails应用程序。已经有一年没有人碰它了。上一个开发者在2015年4月离开,我无法联系到他。我可以通过ssh访问服务器,并且可以访问Github存储库。

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

如果我使用ssh连接到服务器并cat数据库.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 console”,我会得到:

  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权限,所以无法解决这个错误。

3个回答

39
假设您的示例指向了暂存环境。您需要在rails console命令前添加RAILS_ENV环境变量以加载控制台。
RAILS_ENV=staging rails console

那应该能让你进去了。一旦你进去了,你可以直接访问ENV变量。

2.2.2 (main):0 > ENV

然后它将为您转储环境变量。请注意,您的提示符可能会有所不同。如果您想访问特定的值,比如数据库密码,您可以:

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

有没有办法告诉“rails console”日志文件的位置?日志文件在“/var/www/wawa/production/shared/log”,但是rails console却在“/var/www/wawa/production/log”寻找它,因为找不到而抛出错误。 - lorm
请查看config/application.rb和config/enivornments/production.rb文件中是否有类似config.logger的行。通常情况下,日志记录配置会在这两个文件中被覆盖。http://guides.rubyonrails.org/configuring.html也可能会有所帮助。 - Josh Deeden

5

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

rails c

然后在提示符处:

ENV

这将列出您最后导出的任何环境的所有加载的环境变量。

抱歉,在发布此内容后,我意识到作者已尝试使用rails控制台但遇到了错误...但我相当确定这应该总是有效的。您不能在控制台中要求printenv或env,您必须使用全大写的"ENV"。


0

你的应用程序/config/env.yml 或 application.yml 等...

查找类似以下代码的内容

AWS_KEY_ID: blahblah23rkjewfojerflbah
AWS_SECRET_KEY_ID: blahblah2394082fkwejfoblah

只有在使用Figaro gem的情况下,才会是真的对吧? - lorm
这个命令不会返回任何内容:find . -name env.yml - lorm
是的,figaro或envyous,尽管如果之前的开发人员使用了ENV变量,它们必须存储在某个地方,除非代码被推送到GitHub并且您从那个.yml文件在.gitignore中时拉取。 - Julian Guterman
如果文件不超过100个,我会建议你逐个查看,但是请尝试在/config目录下特别检查*.yml文件。 - Julian Guterman
如果我运行“grep -iR DATABASE_PASSWORD *”,我找不到任何设置ENV的内容。无论是什么设置了ENV变量,它都在项目之外。我猜可能是由启动项目的Capistrano脚本设置的。 - lorm
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接