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

时间:2016-04-29 22:13:38

标签: ruby-on-rails ruby environment-variables yaml

在我的本地计算机上,我想为database.yml文件中的所有敏感信息设置环境变量。我的文件看起来像这样:

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文件的方式,但我不确定它是什么。

这里有什么重要的东西吗?任何帮助将非常感激。

谢谢!

7 个答案:

答案 0 :(得分:22)

我想在这里提供一些提示。

  1. 您可以通过erb运行database.yml来测试您获得的内容。例如,erb config/database.yml。这将有助于您确定问题所在。

  2. 您可以使用set命令查找shell中设置的每个环境变量。这样您就可以确认您正在设置的环境变量(.bashrc)。

  3. 希望这有用。

答案 1 :(得分:3)

事实证明,在我编辑了我的bashrc文件之后,我需要退出该终端会话并打开另一个终端以完成更改:/我完成后我的应用程序启动完美。

答案 2 :(得分:1)

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

您可以使用mysql命令行应用程序直接使用实际值连接到mysql吗?

答案 3 :(得分:1)

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

source /path/to/.bashrc

在与rails服务器相同的终端中。

答案 4 :(得分:1)

您可能需要将环境变量放在.bashrc文件的顶部。因为它在文件中执行了一些返回。因此它会在实际执行export命令之前返回

类似这样的东西:

nano〜/ .bashrc

export DATABASE_VAR="my_own_var"

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

答案 5 :(得分:0)

您还可以在终端上使用以下命令来获取〜/ .bashrc文件:

exec $SHELL

答案 6 :(得分:0)

您是否尝试过从控制台使用该数据访问本地数据库? 也许您必须授予对本地主机的访问权限

GRANT ALL ON shoppe_development.* TO 'root'@'localhost';

除此之外,我建议您使用宝石dotenv来处理开发环境的环境变量