我正在尝试在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!
出了什么问题?
答案 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”。