繁体   English   中英

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

[英]How to set rails environment variables in database.yml file?

在我的本地机器上,我想为 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 文件的方式,数据库用户名和密码存在问题,但我不确定它是什么。

我在这里错过了什么大事吗? 任何帮助将非常感激。

谢谢!

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

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

  2. 您可以使用set命令找出在您的 shell 中设置的每个环境变量。 这将允许您确认正在设置您期望的环境变量(在.bashrc )。

希望这是有帮助的。

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

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

source /path/to/.bashrc

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

这是打字错误还是您真的设置了JETSTREAMIQ_DATABASE_PASSWORD但随后在您的database.yml使用了DATABASE_PASSWORD 因为那样就可以了。

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

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

像这样:

纳米 ~/.bashrc

export DATABASE_VAR="my_own_var"

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

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

exec $SHELL

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

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

除此之外,我建议您使用 gem dotenv来处理开发环境的 env vars

简单设置环境变量

DATABASE_URL=postgres://user:pass@localhost/dbname

它将覆盖database.yml设置

Offcourse它支持更多的参数,比如

DATABASE_URL=mysql2://user:passwd@host:port/dbname?encoding=utf8mb4&collation=utf8mb4_unicode_ci

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM