2016-04-29 116 views
5

在我的本地机器上,我想为database.yml文件中的所有敏感信息设置环境变量。我的文件是这样的:如何在database.yml文件中设置rails环境变量?

default: &default 
    adapter: mysql2 
    encoding: utf8 
    pool: 5 
    username: <%= ENV['DATABASE_USERNAME'] %> 
    password: <%= ENV['DATABASE_PASSWORD'] %> 
    socket: <%= ENV['SOCKET'] %> 

development: 
    <<: *default 
    database: <%= ENV['DEVELOPMENT_DATABASE'] %> 

test: 
    <<: *default 
    database: #JetStreamIQ-2_0_test 

production: 
    <<: *default 
    database: <%= ENV['PRODUCTION_DATABASE'] %> 
    username: <%= ENV['DATABASE_USERNAME'] %> 
    password: <%= ENV['DATABASE_PASSWORD'] %> 

我以为我可以只设置在我的.bashrc文件这些环境变量,但似乎并不奏效。我的.bashrc文件看起来是这样的:

export DATABASE_USERNAME="root" 
export DATABASE_PASSWORD="*****" 
export SOCKET="/var/run/mysqld/mysqld.sock" 
export DEVELOPMENT_DATABASE="shoppe_development" 
export PRODUCTION_DATABASE="#" 

当我跑我的

rails s 

服务器我得到一个错误,指出:

Access denied for user 'root'@'localhost' (using password: YES) 

我明白,有一个问题数据库的用户名和密码,因为我配置我的database.yml文件的方式,但我只是不知道它是什么。

有什么大的,我在这里失踪?任何帮助将非常感激。

谢谢!

回答

1

这是一个错字还是你真的设置了JETSTREAMIQ_DATABASE_PASSWORD但是在你的database.yml中使用DATABASE_PASSWORD?因为那样做会。

你能直接连接使用的实际值使用mysql命令行应用到mysql?

+0

不,那是一个错字;对此抱歉,我只是编辑了我的帖子。是的,如果我只是在使用mysql命令行时输入它们,我可以连接到我的bashrc文件中的值。 – Mark

11

我想提供一些秘诀在这里。

  1. 你可以通过erb运行database.yml来测试你得到的结果。例如,erb config/database.yml。这将帮助您确定问题可能是什么。

  2. 你可以找到每一个环境变量与set命令你的shell设置。这将允许您确认您正在设置的环境变量正在被设置(在.bashrc中)。

希望这会对您有所帮助。

+2

这是'erb config/database.yml'命令的一个很棒的技巧。我不知道你可以这样做。当我运行该命令时,它显示我已经定义了环境变量的所有字段都是空的。 – Mark

2

事实证明,在我编辑我的.bashrc文件,我需要退出该终端会话并打开另一个终端的变化敲定:/后我做了我的应用程序启动非常完美。

+1

您是对的 - '.bashrc'仅在您登录时加载,所以启动新的终端会话是查看您的更改的一种方法。或者你可以做'。 。bashrc'来加载文件而不重新启动会话。 – Brian

+0

哦,很酷,谢谢你的提示! – Mark

0

如果你不想重新启动你的终端,你只需要执行您的.bashrc文件:

source /path/to/.bashrc 

在同一个终端作为轨道服务器。