Раньше у нас было успешное соединение с 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
То, что мы пробовали:
$ brew services list
$ brew services restart mysql
[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.server status
У меня есть теория, что при установке gem dotenv-rails мы, возможно, потеряли некоторые учетные данные MySQL, которые предоставили доступ к серверу из нашего локального каталога проекта... Опять же, мы все еще можем подключаться к серверу через MySQL CLI, чтобы мы знали все на AWS прекрасно и здорово. Я также не могу войти в mysql как локальное имя пользователя или root. В настоящее время пытается понять эту проблему.
Решенный - оказывается, он был связан с изменениями, внесенными мной в настройку переменной среды. В этом разделе Руководства 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", поэтому она волновалась. Надеюсь, это поможет кому-то еще!
'<database_name>.us-east-1.rds.amazonaws.com'
-> откуда он получалdatabase_name
ранее? Я заметил, что среды разработки / тестирования говорят, чтоdatabase: test
тогда как prod не определяет один ... это уместно? Есть ли соответствующая переменная среды, которая не была добавлена в.env
? у heroku, как правило, есть волшебные, динамически создаваемые вариации ENV - это может быть один из тех ...