MySQL не будет подключаться к развертыванию EC2 с помощью Rubber

Я использую резину для развертывания приложения rails, и у меня возникают проблемы с подключением к MySQL. Должен ли я вручную настраивать MySQL на EC2, или это уже сделали в Rubber? Хотя это не так уж и полезно, вот вывод журнала при запуске rake:

 ** [out :: db01.memepluspl.us] rake aborted!
 ** [out :: db01.memepluspl.us] 
 ** [out :: db01.memepluspl.us] Access denied for user ''@'db01.memepluspl.us' to database 'meme_plus_plus_production'
 ** [out :: db01.memepluspl.us] 
 ** [out :: db01.memepluspl.us] 
 ** [out :: db01.memepluspl.us] Tasks: TOP => db:migrate => environment

person morcutt    schedule 21.06.2012    source источник


Ответы (4)


в моем случае имя приложения, которое я ввел в Rubber.yml, на самом деле отличалось от фактического имени приложения (файлы проекта сохраняют имя заполнителя)...

Я подключился к экземпляру по ssh, искал current/ и cat config/database.yml, затем просто попытался запустить команду подключения, rake попытается запустить из того, что там есть, и ошибка была там, поэтому я предлагаю попытаться лучше отладить то, что происходит.

Я догадался, что мне пришлось изменить конфигурации Rubber-mysql.yml... Сейчас я воссоздаю промежуточный материал, я думаю, что он должен, по крайней мере, пройти через эту проблему. gl

person Breno Salgado    schedule 03.07.2012

Если у кого-то еще есть эта проблема, это потому, что в mysql теперь добавлены анонимные пользователи по умолчанию с ограниченным доступом.

Проблема обсуждается здесь.

Первое решение недостаточно полное, вам нужно то, что в конце, которое удаляет всех анонимных пользователей (не только localhost). Это связано с тем, что MYSQL будет аутентифицироваться на HOST перед ПОЛЬЗОВАТЕЛЕМ, поэтому анонимный пользователь ''@'your.host.com' будет иметь приоритет над 'dbuser'@'your.host.com' (задокументировано в документацию по mysql), и Rubber попытается подключиться с полным именем хоста.

Отредактируйте файл ./config/rubber/deploy-mysql.yml:

rubber.sudo_script "create_master_db", <<-ENDSCRIPT
  mysql -u root -e "create database #{env.db_name};"
  mysql -u root -e "delete from mysql.user where user='';"   <<-- ADD THIS LINE
  ...
ENDSCRIPT
person peterept    schedule 05.10.2012
comment
Замечательно, спасибо! Это указало на проблему анонимного пользователя, поэтому я просто запустил mysql_secure_installation, чтобы защитить свою установку. Кроме того, я использую MariaDB на Yosemite. - person Joe; 26.11.2014

Я не очень хорошо разбираюсь в руле, но, похоже, ему не хватает какой-то конфигурации. Пользователь не указан и, вероятно, пароль тоже.

person Renra    schedule 21.06.2012
comment
Да, я просто не уверен, где это настроить. Насколько я понял, об этом позаботилась Rubber. В файле Rubber-mysql.yml есть некоторая конфигурация, но я не изменил ее. Я оставил его со значениями по умолчанию. - person morcutt; 21.06.2012

Я вообще не знаком с Rubber, поэтому я не знаю, должен ли он создать для вас вашу учетную запись MySQL, но вот как это сделать вручную:

mysql -u root
mysql> grant all on meme_plus_plus_production.* to 'user'@'db01.memepluspl.us' identified by 'password';
mysql> flush privileges;
mysql> exit;

Возможно, вам потребуется ввести пароль для корневой учетной записи MySSQL; например, в Ubunutu по умолчанию используется «пароль».

Также обратите внимание, что в моем примере указанному пользователю предоставляются полные права на чтение и запись для каждой таблицы в базе данных. Найдите команду предоставления MySQL, если вы хотите использовать ограниченные привилегии.

person gareth_bowles    schedule 21.06.2012