如何通过yaml文件在rails中加载配置变量

时间:2015-10-10 08:44:10

标签: mysql ruby-on-rails ruby yaml

我正在尝试在config/database.yml中使用环境变量。

这是我的local_env.yml

# Local Environment Variables
MYSQL_SOCK: "/tmp/mysql.sock"

然后我用rails console检查它是否正确,确定无误:

>> irb(main):002:0> ENV["MYSQL_SOCK"]
=> "/tmp/mysql.sock"

但是在config/database.yml

default: &default
  adapter: mysql2
  socket: ENV["MYSQL_SOCK"]

我收到以下错误:

Mysql2::Error: Can't connect to local MySQL server through socket 'ENV["MYSQL_SOCK"]' (2)

但是...

default: &default
  adapter: mysql2
  socket: "/tmp/mysql.sock"

works!

出了什么问题?

1 个答案:

答案 0 :(得分:0)

这种做法通常用于定义配置变量,如应用ID,密钥,s3凭据等,此文件放在.gitignore

使用settings.yml(通常)或local_env.yml创建yml文件。然后根据环境定义您的密钥。

development:
  MYSQL_SOCK: "/tmp/mysql.sock"
production:
  MYSQL_SOCK: "file path here" 

然后通过初始化程序加载它。 在初始化程序目录中创建文件名“0_load_config.rb”。在文件名中添加“0”,因为此文件应先加载到其他初始化程序。

然后将local_env.yml文件加载到常量

LOCAL_ENV = YAML.load_file("#{Rails.root}/config/local_env.yml")[Rails.env]

然后您可以在应用程序中访问此变量。您也可以通过rails控制台查看:

LOCAL_ENV["MYSQL_SOCK"]

它将为您提供您在local_env.yml中提供的vaue,即“/tmp/mysql.sock”。