2011-03-22 194 views
32

¿Puedo utilizar la base de datos mysql de mi servidor web personal en lugar de la base de datos de heroku?Base de datos remota de mysql en la aplicación Heroku

que configuran mi base de datos de producción como esto:

production: 
    adapter: mysql2 
    database: somedatabase 
    username: someusername 
    password: somepassword 
    host: 1.1.1.1:1234 

embargo, esto no funciona, mi aplicación todavía utiliza heroku se comparte la base de datos.

Respuesta

47

Ésta es antiguo pero en caso de que alguien gotas en busca de una respuesta, es mucho más fácil que usar la gema. Solo proporcione un DATABASE_URL y SHARED_DATABASE_URL (no estoy seguro si el segundo es necesario). El formato URL base de datos es adapter://username:[email protected]:port/database, así por ejemplo, que haría:

heroku config:add DATABASE_URL=mysql://etok:[email protected]<your-server>:3306/etok 
heroku config:add SHARED_DATABASE_URL=mysql://etok:[email protected]:3306/etok 

A continuación, volver a implementar la aplicación. Leerá su DATABASE_URL y generará database.yml a partir de eso. El puerto predeterminado ya es 3306 por lo que no es necesario en la url en su caso. Al implementar, es posible que observe que genera su database.yml:.

-----> Writing config/database.yml to read from DATABASE_URL 

Entonces ya está listo (siempre que el servidor acepta conexiones desde el host heroku

+9

Parece que 'DATABASE_URL' es suficiente, funciona sin especificar 'SHARED_DATABASE_URL'. Además, me gustaría notar que el adaptador 'mysql2' ahora es más común que' mysql'. Entonces se verá como 'mysql2: // ...'. Por supuesto, debes agregar 'gem 'mysql2'' en tu' Gemfile'. –

+0

¿Se puede usar X.509 de esta manera? –

+2

"En caso de que' cualquier persona 'caiga buscando una respuesta ". Me acabas de salvar el día. ¡Gracias! Esto es mucho más simple de lo que podría haber pensado. – RileyE

1

echar un vistazo a Heroku Amazon RDS addon. No estoy diciendo que lo uses, pero te da una idea de lo que debes hacer y de cómo Heroku maneja las bases de datos; básicamente, necesitas establecer una variable de configuración para tu instancia de MySQL.

1

Heroku ignora su base de datos.yml. Tendrá que explorar la solución de Amazon RDS sugerida por John Beynon o algún otro complemento similar (si lo hay). OMI, tendrá que volver a evaluar su necesidad de utilizar su base de datos MySQL o buscar otro alojamiento. En caso de que no supiera ya que, el comando:

heroku db:push 

duplicará tanto el esquema y los datos de su base de datos MySQL en el desarrollo de base de datos PostgreSQL heroku. Así que seguir con MySQL para dev no es problema.

Espero que ayude.

+0

Me di cuenta de que ignoraba mi base de datos.yml y traté de configurar DATABASE_URL con esto: config: add DATABASE_URL = mysql2: // usuario: contraseña @ host/nombrebd pero no funciona, la aplicación está buscando db en el servidor de Amazon. Esto es de log: /app/.bundle/gems/ruby/1.8/gems/mysql2-0.2.6/lib/mysql2/client.rb:37:in 'connect ': Acceso denegado para el usuario' etok '@' ec2 -174-129-89-188.compute-1.amazonaws.com '(usando la contraseña: SÍ) (Mysql2 :: Error) – dormitkon

8

He escrito una gema que puede ayudar con esto. Lo puedes encontrar en:

http://github.com/nbudin/heroku_external_db

+0

Gracias Nat. ¡He estado usando tu gema por un mes y funciona bien! – Dorian

+1

También hemos estado usando esto durante aproximadamente un año. Agregué un poco de documentación para ese proyecto, así que es más fácil comenzar. Aquí hay un enlace al escrito en mi blog: http://www.benjaminoakes.com/2011/11/21/using-heroku-with-an-external-mysql-database/ –

3
heroku config:add DATABASE_URL=mysql://dbusername:[email protected]:3306/databasename 
heroku config:add SHARED_DATABASE_URL=mysql://dbusername:[email protected]:3306/databasename 

Entonces, hacer un

Heroku restart 

que debe hacer

Nota importante:. sugiero que usted utilice dirección IP del host de base de datos que usar dando el nombre de host directamente, coz, con algunos servicios de alojamiento compartido como godaddy, el nombre de host db se parece a user.345432.abcd.godaddy.com y parece que heroku no puede resolverlo correctamente (experiencia personal) , Resolví el nombre de host a la dirección IP y el uso de la IP funcionó directamente como un encanto! Además, si la contraseña de su base de datos tiene caracteres especiales, asegúrese de que los escape correctamente (como '\!' Para '!' Y así sucesivamente ...)

Cuestiones relacionadas