2010-11-16 22 views
6

Quería conectarme a un host MySQL remoto (con rake db:create), pero Rails siempre lo considera como local. database.yml que utiliza la siguiente configuración:Problemas de conexión a un host MySQL remoto con 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> 

Y siempre conseguir este error al intentar cualquier cosa en la base de datos:

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

La configuración funciona siempre y cuando utilizo la base de datos local (es decir, sin la parte del host/puerto). La conexión al servidor MySQL remoto funciona bien con los detalles especificados.

¿Alguna idea sobre qué está pasando mal?

Editar: El problema sólo se produce con rake:db:create, otras tareas de trabajo - El mensaje de error fue realmente mal engañosa.

+0

¿Puedes pegar la base de datos completa.yml? y que env usas? Supongo que define una configuración de socket en alguna parte. – shingara

+0

(ver edición, parece ser un extraño mensaje de error) –

+0

Compruebe la configuración de su cortafuegos/enrutador, no parece que esté teniendo una conexión TCP o el puerto está bloqueado. –

Respuesta

1

Es posible que necesite habilitar el servidor MySQL para aceptar solicitudes remotas (mediante el enlace a la dirección IP del host o al formato de todas las direcciones 0.0.0.0). Edite el archivo de configuración de MySQL my.cnf en el host remoto. En Ubuntu, se puede encontrar el archivo en /etc/mysql/my.cnf

Cambiar el valor de bind-dirección:

bind-address   = 0.0.0.0 
+0

O solo comenta bind-address. – mahemoff

+0

Tienes que escribir esto. comentar no funcionará, ya que considerará aceptar conectarse solo desde el host actual. – Yeameen

0

me encontré con lo mismo. Yo estaba usando esto:

RAILS_ENV=production bundle exec rails console 

Y se quejaba de no poder encontrar /tmp/mysql.sock (que es sólo en la sección de desarrollo de database.yml). Si marqué Rails.env desde la consola, dicha producción fue correcta. La solución es tan simple como:

RACK_ENV=production bundle exec rails console 
Cuestiones relacionadas