Как установить переменные среды 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

Я хотел бы предложить пару советов.

  1. Вы можете запустить database.yml через erb, чтобы проверить, что вы получаете. Например, erb config/database.yml. Это поможет вам определить, в чем проблема.

  2. Вы можете узнать каждую переменную среды, заданную в вашей оболочке, с помощью команды 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