Как использовать MySQL на Docker при локальной разработке проекта Rails - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь использовать MySQL на Docker (вместо Homebrew) для проекта Rails. Это потому, что мне нужны разные версии MySQL для каждого проекта, и переключать версии с помощью brew очень сложно. Однако у меня возникают проблемы с указанием Rails на сервер MySQL на Docker.

Я запустил контейнер Docker следующим образом (5.6 - это нужная мне версия):

docker run -p 3306:3306 --name project-db -e MYSQL_ROOT_PASSWORD=mysql_pw -d mysql:5.6

Контейнер работает нормально, потому что

  • docker ps говорит мне, что он работает
  • Я могу подключиться к нему через mysql -u root -p -h 127.0.0.1

Но я не могу заставить Rails создать свою БД в Docker; Выполнение rails db:setup создает базу данных в локально установленном MySQL.

Я попытался удалить MySQL локально с помощью brew uninstall mysql, думая, что, возможно, он каким-то образом перекрывает Docker. Но затем попытка настроить БД приводит к этой ошибке:

Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Я не очень знаком с Docker, поэтому я, вероятно, что-то неправильно понимаю. Я гуглил, но большая часть информации, которую я смог найти, касалась Dockerization всего проекта Rails, включая MySQL, что я не пытался сделать.

Спасибо за любой совет заранее!

1 Ответ

1 голос
/ 10 апреля 2020

Ваш экземпляр MySQL предоставляется на локальном хосте через порт 3306. Вы должны настроить Rails для его использования, например:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306

Или с помощью переменной среды:

export DATABASE_URL=mysql2://root:@127.0.0.1

См. этот пост и rails do c для получения подробной информации

В настоящее время вы пытаетесь получить доступ к MySQL через сокет на /tmp/mysql.sock, но там ничего нет доступно здесь, поскольку ваш экземпляр MySQL попадает в его контейнер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...