#mysql #ruby-on-rails #mysql-error-1045
#mysql #ruby-on-rails #mysql-ошибка-1045
Вопрос:
Мне трудно заставить Ruby подключиться к MySQL. Я могу заставить MYSQL подключиться, используя MySQL workbench, так что это хорошо. Вот ошибка, которую я получаю при попытке запустить DBConsole.
W:testMySQL>rails dbconsole
Enter password: ********
ERROR 1045 (28000): Access denied for user 'coffeetowndev'@'localhost' (using pa
ssword: YES)
Я работаю с базой данных под учетной записью GoDaddy, поэтому я не могу предоставить все привилегии этому пользователю. Я позвонил в godaddy, и они поклялись, что их отдел RoR смог подключиться, используя мои настройки.
Говоря об этом, вот файл database.yml.
development:
adapter: mysql
encoding: utf8
reconnect: false
port: 3306
database: coffeetowndev
pool: 5
username: coffeetowndev
password: ********
hostname: coffeetowndev.db.5850247.hostedresource.com
по поводу связанного / не связанного примечания, я не могу установить mySQL2 gem для установки, поэтому я использую MySQL one.
редактировать: файл database.yml целиком
development:
adapter: mysql
encoding: utf8
reconnect: false
port: 3306
database: coffeetowndev
pool: 5
username: coffeetowndev
password: ********
hostname: coffeetowndev.db.5850247.hostedresource.com
test:
adapter: mysql
encoding: utf8
reconnect: false
port: 3306
database: coffeetowntest
pool: 5
username: coffeetowntest
password: ********
hostname: coffeetowntest.db.5850247.hostedresource.com
production:
adapter: mysql
encoding: utf8
reconnect: false
port: 3306
database: coffeetown
pool: 5
username: coffeetown
password: ********
hostname: coffeetown.db.5850247.hostedresource.com
Комментарии:
1. Есть ли еще информация, которую вы хотите увидеть? а файлы? страницы ошибок? страницы без ошибок? Кроме того, похоже, что мой призыв о помощи был отредактирован. Это более требовательное место для помощи?
Ответ №1:
Используете ли вы производственные настройки при развертывании в godaddy вместо настроек разработки? У меня нет опыта использования godaddy для размещения приложений Rails, но, возможно, они настраивают все размещенные приложения по умолчанию для производственной среды (многие хосты rails делают). Следовательно, он может использовать не ту комбинацию имени пользователя и пароля, которую вы ожидаете, если он использует другую среду.
Вы также можете попробовать проверить свои учетные данные, написав быстрый и грязный тестовый скрипт PHP, что-то вроде этого:
$con = mysql_connect("coffeetowndev.db.5850247.hostedresource.com","coffeetowndev","******");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($con);
Кроме того, выше говорится, что это сбой, но он пытается использовать user 'coffeetowndev'@'localhost'
. Вы должны убедиться, что вы предоставили разрешения этому пользователю, используя что-то вроде этого:
grant select,insert,update,delete on coffeetowndev.* to 'coffeetowndev'@'localhost' identified by ********
Комментарии:
1. о, я использую godaddy не для точки доступа rails, а только для базы данных MySQL. Я планирую перенести это в heroku, но сохранить базу данных там, где она есть? или это ужасная идея?
2. Ах. Значит, что-то не так. Он пытается использовать локальную базу данных. Где бы вы ни запускали приложение rails, оно пытается подключиться к базе данных локально и не пытается подключиться к coffeetowndev.db.5850247.hostedresource.com с удаленного хоста. В противном случае сообщение об ошибке mysql было бы таким:
ERROR 1045 (28000): Access denied for user 'coffeetowndev'@'123.123.123.1' (using pa ssword: YES)
, где 123.123.123.1 — удаленный хост, на котором запущено приложение rails.3. но он знает, что пользователь ‘coffeetowndev’, когда я ввожу пароль, если я ввожу его без пароля, я получаю эту ошибку: ОШИБКА 1044 (42000): пользователю «@’localhost’ отказано в доступе к базе данных ‘coffeetowndev’, поэтому он попадает в правильную базу данных, потому что в базе данных localhost нет никакой информации вообще.
4. Что касается плохой идеи, параноидальная сторона меня говорит «да». Однако многие хосты оставляют mysql открытым для Интернета по умолчанию (с точки зрения порта). Затем вам нужно быть абсолютно уверенным, что вы максимально жестко заблокировали пользовательские разрешения. Вероятно, вам придется использовать% в качестве подстановочного знака в сегменте хостинга, поскольку удаленный IP, скорее всего, изменится при размещении с Heroku. Итак, вам понадобится что-то вроде этого:
grant ... on ... to 'coffeetowndev'@'%'
. Однако моей внутренней реакцией было бы просто разместить вашу базу данных на Heroku, а не пытаться разместить ее с помощью Godaddy.5. Попробуйте заменить
hostname:
наhost:
в вашей базе данных.yml-файл. Можете ли вы вставить весь ваш файл database.yml? На какой версии rails вы работаете?
Ответ №2:
Установлен ли у вас phpMyAdmin на вашем SQL server? Обычно всякий раз, когда я создаю новых пользователей, я использую phpMyAdmin и настраиваю пользователя с предоставлением доступа к базе данных, с которой я работаю в RoR. Ваша база данных.yml выглядит нормально, проблема на стороне SQL.
Комментарии:
1. У меня есть, но я не смог выполнить выбор в таблице MySQL.users. У меня не было разрешения даже на это. Я попытался предоставить all для пользователя ‘coffeetowndev’, но эта ошибка выдана.
2. Под именем какого пользователя вы вошли в систему, когда пытались предоставить разрешение?
3. coffeetowndev. У меня нет возможности root-доступа от godaddy. bah. (и, конечно, это не сработает. Теперь я это вижу)
4. На самом деле вам не нужен root, вам просто нужно
with grant option
указать в своей учетной записи. Я ожидал бы, что вы могли бы настроить это или, по крайней мере, настроить дополнительных пользователей с их панели управления.