ActiveRecord NoDatabaseError при попытке подключиться к экземпляру AWS MySQL

0

Раньше у нас было успешное соединение с Rails с экземпляром AWS MySQL через ActiveRecord, но из-за нашего последнего нажатия на Heroku это соединение было отключено. Мы не понимаем, почему, поскольку мы включили весь трафик в настройках AWS RDS, а учетные данные в нашем файле конфигурации database.yml не изменились. Единственная большая вещь, которая изменилась в толчке к Heroku, заключалась в добавлении драгоценного камня dovenv и передаче контроля над переменными окружающей среды в этот драгоценный камень.

При загрузке нашего сервера rails в любой из наших трех сред (dev, test, production) мы получаем NoDatabaseError из ActiveRecord:

ActiveRecord::NoDatabaseError - Unknown database '<database_name>.us-east-1.rds.amazonaws.com'

Мы можем успешно подключиться к базе данных через MySQL CLI.

database.yml:

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: "<username>"
  password: "<password>"
  host: <database_name>.us-east-1.rds.amazonaws.com
  port: <port>

development:
  <<: *default
  database: test

test:
  <<: *default
  database: test

production:
  <<: *default

Соответствующие локальные зависимости:

activerecord (5.1.4)
mysql2 (0.4.10)
rails (5.1.4)

Группы безопасности AWS:

default (<group_id>)    CIDR/IP - Inbound   0.0.0.0/0
default (<group_id>)    CIDR/IP - Outbound  0.0.0.0/0
Publicly accessible: Yes

То, что мы пробовали:

  • Перезапуск сервера MySQL: $ brew services list $ brew services restart mysql
  • Просмотр журналов MySQL на AWS, который показывает ошибку: [Warning] IP address '<ip_address>' could not be resolved: Name or service not known
  • Тестирование на производстве, которое при попытке подключения к базе данных дает ошибку: ActiveRecord::StatementInvalid: Mysql2::Error: No database selected
  • Запуск rake db:create RAILS_ENV=development, который дает ошибку: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.'<possibly_private_id>'.'us-east-1'.'rds'.'amazonaws'.'com' DEFAULT CHARACTER SET 'utf8'' at line 1 Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.'<possibly_private_id>'.'us-east-1'.'rds'.'amazonaws'.'com' DEFAULT CHARACTER SET 'utf8'' at line 1
  • Удаление mysql,/usr/local/var/mysql и переустановка mysql (через заваривание)
  • Проверка переменных ENV, которых нет в MySQL.
  • Подтверждено, что мой сервер mysql работает, запустив mysql.server status

У меня есть теория, что при установке gem dotenv-rails мы, возможно, потеряли некоторые учетные данные MySQL, которые предоставили доступ к серверу из нашего локального каталога проекта... Опять же, мы все еще можем подключаться к серверу через MySQL CLI, чтобы мы знали все на AWS прекрасно и здорово. Я также не могу войти в mysql как локальное имя пользователя или root. В настоящее время пытается понять эту проблему.

  • 0
    Он буквально ищет '<database_name>.us-east-1.rds.amazonaws.com' -> откуда он получал database_name ранее? Я заметил, что среды разработки / тестирования говорят, что database: test тогда как prod не определяет один ... это уместно? Есть ли соответствующая переменная среды, которая не была добавлена в .env ? у heroku, как правило, есть волшебные, динамически создаваемые вариации ENV - это может быть один из тех ...
Теги:
amazon-web-services
activerecord

1 ответ

0

Решенный - оказывается, он был связан с изменениями, внесенными мной в настройку переменной среды. В этом разделе Руководства Rails он отмечает, что конкретное объявление "DATABASE_URL" в качестве переменной среды автоматически устанавливает или переопределяет переменную database объявленную в файле config/database.yml.

В моем случае переменная host (установленная в config/database.yml) была правильно установлена в MY_DATABASE_NAME.amazon.aws, но переменная DATABASE_URL в моей среде молча устанавливала переменную database конфигурационного файла на тот же MY_DATABASE_NAME.amazon.aws.

У меня нет базы данных под названием "MY_DATABASE_NAME.amazon.aws", поэтому она волновалась. Надеюсь, это поможет кому-то еще!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню