I am trying to use an environment variable in config/database.yml
.
我试图在config / database.yml中使用环境变量。
This is my local_env.yml
:
这是我的local_env.yml:
# Local Environment Variables
MYSQL_SOCK: "/tmp/mysql.sock"
Then I check if it is correct with the rails console
and sure enough:
然后我用rails控制台检查它是否正确并且确定:
>> irb(main):002:0> ENV["MYSQL_SOCK"]
=> "/tmp/mysql.sock"
However in config/database.yml
:
但是在config / database.yml中:
default: &default
adapter: mysql2
socket: ENV["MYSQL_SOCK"]
I get the following error:
我收到以下错误:
Mysql2::Error: Can't connect to local MySQL server through socket 'ENV["MYSQL_SOCK"]' (2)
But...
default: &default
adapter: mysql2
socket: "/tmp/mysql.sock"
works!
What is going wrong?
出了什么问题?
1 个解决方案
#1
0
This practise is generally followed for defining configuration variables like app ids, secret keys, s3 credentials etc and this file is put in .gitignore
.
这种做法通常用于定义配置变量,如app id,密钥,s3凭证等,此文件放在.gitignore中。
Create a yml file with settings.yml
(generally) or local_env.yml
. Then define your keys according to environment.
使用settings.yml(通常)或local_env.yml创建yml文件。然后根据环境定义您的密钥。
development:
MYSQL_SOCK: "/tmp/mysql.sock"
production:
MYSQL_SOCK: "file path here"
And then load it via initializers. Create a file name "0_load_config.rb" inside your initializers directory. '0' is added in filename because this file should be loaded first then other initializers.
然后通过初始化程序加载它。在initializers目录中创建文件名“0_load_config.rb”。文件名中添加了“0”,因为此文件应先加载,然后再加载其他初始值设定项。
Then load local_env.yml
file in a constant
然后在常量中加载local_env.yml文件
LOCAL_ENV = YAML.load_file("#{Rails.root}/config/local_env.yml")[Rails.env]
Then you can access this variable in your application. You can check via rails console also:
然后,您可以在应用程序中访问此变量。您也可以通过rails控制台检查:
LOCAL_ENV["MYSQL_SOCK"]
It will give you the vaue which you had provided in local_env.yml
i.e "/tmp/mysql.sock".
它将为您提供您在local_env.yml中提供的vaue,即“/tmp/mysql.sock”。
#1
0
This practise is generally followed for defining configuration variables like app ids, secret keys, s3 credentials etc and this file is put in .gitignore
.
这种做法通常用于定义配置变量,如app id,密钥,s3凭证等,此文件放在.gitignore中。
Create a yml file with settings.yml
(generally) or local_env.yml
. Then define your keys according to environment.
使用settings.yml(通常)或local_env.yml创建yml文件。然后根据环境定义您的密钥。
development:
MYSQL_SOCK: "/tmp/mysql.sock"
production:
MYSQL_SOCK: "file path here"
And then load it via initializers. Create a file name "0_load_config.rb" inside your initializers directory. '0' is added in filename because this file should be loaded first then other initializers.
然后通过初始化程序加载它。在initializers目录中创建文件名“0_load_config.rb”。文件名中添加了“0”,因为此文件应先加载,然后再加载其他初始值设定项。
Then load local_env.yml
file in a constant
然后在常量中加载local_env.yml文件
LOCAL_ENV = YAML.load_file("#{Rails.root}/config/local_env.yml")[Rails.env]
Then you can access this variable in your application. You can check via rails console also:
然后,您可以在应用程序中访问此变量。您也可以通过rails控制台检查:
LOCAL_ENV["MYSQL_SOCK"]
It will give you the vaue which you had provided in local_env.yml
i.e "/tmp/mysql.sock".
它将为您提供您在local_env.yml中提供的vaue,即“/tmp/mysql.sock”。