Как установить переменные среды rails в файле database.yml?
На моей локальной машине я хочу установить переменные среды для всей конфиденциальной информации в файле 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
Я хотел бы предложить пару советов.
-
Вы можете запустить database.yml через erb, чтобы проверить, что вы получаете. Например, erb config/database.yml
. Это поможет вам определить, в чем проблема.
-
Вы можете узнать каждую переменную среды, заданную в вашей оболочке, с помощью команды set
. Это позволит вам подтвердить, что переменные среды, которые вы ожидаете, устанавливаются (в .bashrc
).
Надеюсь, это полезно.
Ответ 2
Оказывается, после того, как я отредактировал файл bashrc, мне нужно было выйти из этого сеанса терминала и открыть еще один терминал для окончательных изменений:/После того, как я сделал это, приложение начало работать отлично.
Ответ 3
Это опечатка или вы действительно устанавливаете JETSTREAMIQ_DATABASE_PASSWORD
но затем используете DATABASE_PASSWORD
в вашей database.yml
JETSTREAMIQ_DATABASE_PASSWORD
? Потому что это сработает.
Можете ли вы подключиться к mysql, используя фактические значения, напрямую используя приложение командной строки mysql
?
Ответ 4
Если вы не хотите перезапускать терминал, вам просто нужно выполнить свой файл.bashrc:
source /path/to/.bashrc
в том же терминале, что и ваш сервер rails.
Ответ 5
вам может потребоваться поместить переменные окружения в начало файла .bashrc
. потому что он имеет некоторый возврат в файл. поэтому он возвращается перед тем, как фактически выполнить команду export
что-то вроде этого:
нано ~/.bashrc
export DATABASE_VAR="my_own_var"
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac