2010-11-16 7 views
6

Я хотел подключиться к удаленному хосту MySQL (с rake db:create), но Rails всегда считает его локальным. database.yml, который использует следующий конфиг:Проблемы с удаленным хостом MySQL с Rails

defaults: &defaults 
    encoding: unicode 
    adapter: mysql 
    username: <username> 
    password: ************* 
    port: 3306 
    host: <remote ip address> 

development: 
    <<: *defaults 
    database: <db name> 
test: &test 
    <<: *defaults 
    database: <db name> 
production: 
    <<: *defaults 
    database: <db name> 

И всегда получаю эту ошибку при попытке что-либо в базе данных:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

Конфигурационный работает до тех пор, как я использую локальную базу данных (т.е. без часть хоста/порта). Подключение к удаленному серверу MySQL отлично работает с данными.

Любые идеи о том, что происходит не так?

Edit: Проблема возникает только с rake:db:create, другие задачи работы - сообщение об ошибке было очень плохо в заблуждение.

+0

Вы можете вставить полную базу данных.yml? и который вы используете? Предположим, вы где-то определяете конфигурацию сокета. – shingara

+0

(см. Изменение, кажется странным неправильным сообщением об ошибке) –

+0

Проверьте настройки брандмауэра/маршрутизатора, похоже, что у вас нет TCP-соединения вообще или порт заблокирован. –

ответ

1

Возможно, вам потребуется включить MySQL-сервер для приема удаленного запроса (путем привязки к IP-адресу хоста или всего формата адреса 0.0.0.0). Измените конфигурационный файл MySQL my.cnf на удаленном хосте. В Ubuntu, вы можете найти файл в /etc/mysql/my.cnf

Изменение значения Bind-адрес:

bind-address   = 0.0.0.0 
+0

Или просто закомментируйте адрес привязки. – mahemoff

+0

Вы должны это написать. комментирование не будет работать, так как это рассмотрит возможность подключения только с текущего хоста. – Yeameen

0

Я нашел то же самое. Я использовал это:

RAILS_ENV=production bundle exec rails console 

И жаловался не в состоянии найти /tmp/mysql.sock (который только в разделе развития database.yml). Если я проверил Rails.env с консоли, это правильно произвело производство. Фиксация проста:

RACK_ENV=production bundle exec rails console 
Смежные вопросы