ruby-on-rails - pricing - heroku postgres tutorial
Heroku ayuda a implementar la aplicaciĆ³n Rails que usa la base de datos Mysql (2)
- Empuje su aplicación a Heroku (No olvide incluir los toques de gemas)
- Añadir complemento Amazon RDS
- Crear una instancia de base de datos en Amazon RDS
- Ingrese al grupo de seguridad y agregue lo siguiente en esta respuesta en Heroku ayuda Amazon RDS rails push error de base de datos
- Su URL de punto final es su nombre rdshost sin el .amazonaws.com
- Inicie sesión en heroku y acceda al complemento Amazon RDS y agregue mysql: // mysusername: [email protected]/databasename
Estoy intentando implementar una aplicación de Rails que usa Mysql
Yo tengo:
Creé una aplicación Heroku y la he empujado a Heroku.
He agregado Amazon RDS. He creado una instancia de base de datos de Amazon RDS. La URL de mi base de datos de Heroku Amazon RDS es: mysql: // mysusername: [email protected]/mydatabasename
Mi grupo de seguridad DB de Amazon RDS está configurado por defecto
- He intentado empujar mi base de datos local pero obtengo el siguiente error Heroku ayuda Amazon RDS inserta el error de la base de datos
Qué estoy haciendo mal ?
¿Cuál es mi nombre de ruta? ¿Es el punto final de Amazon?
Solo quería decir primero que siento tu dolor. Hace poco fui un completo novato en Rails 3 + Heroku + Amazon RDS. Pero, esta noche vencí el problema e inmediatamente me subí a para que otros que tenían problemas supieran cómo hacerlo. Voy a blogear sobre eso más tarde.
Puede omitir algo de esto, pero trataré de ser exhaustivo en mi respuesta aquí, incluidos los pasos que deberá seguir, así como los problemas y problemas que también encontré.
Gotcha # 1: heroku no puede instalar la gema mysql2 con el siguiente error:
You have added to the Gemfile:
* mysql2
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler
Solución: Casi siempre uso PostgreSQL para cualquier tarea exigente en la que estoy trabajando, y para sandboxes y experimentos, solo uso SQLite3 para entrar y salir rápidamente. El problema real fue que no estaba ejecutando MySQL en mi máquina local. Cuando volví y traté de ejecutar la bundle install
del bundle install
localmente, la instalación de la gema falló porque no pudo encontrar las bibliotecas mysql. Estoy seguro de que hay una forma de evitar esto, pero simplemente mordí la bala e instalé mysql localmente. Después, pude ejecutar la bundle install
sin ningún problema. Además, git push heroku master
la aplicación a Heroku sin ningún fallo:
Installing activerecord (3.0.6)
Installing activeresource (3.0.6)
>>>>Installing mysql2 (0.3.2) with native extensions<<<<
Using bundler (1.0.7)
Installing thor (0.14.6)
Installing railties (3.0.6)
Installing rails (3.0.6)
Installing sqlite3 (1.3.3) with native extensions
Your bundle is complete! It was installed into ./.bundle/gems/
Compiled slug size is 3.9MB
-----> Launching... done
http://myapp.heroku.com deployed to Heroku
Gotcha # 2: Mi aplicación se bloqueó, incluso después de instalar la gema mysql2. heroku logs
revelaron:
RuntimeError (!!! Missing the mysql2 gem. Add it to your Gemfile: gem ''mysql2''):
¿Qué? ¡Acabo de agregar eso a mi archivo gem, lo comprometí y lo empujé con éxito! Realmente pensé que alguien me estaba jugando una broma desagradable. Un poco de investigación y complicidad reveló que una heroku rake db:migrate
estaba regresando:
WARNING: This version of mysql2 (0.3.2) doesn''t ship with the ActiveRecord adapter bundled anymore as it''s now part of Rails 3.1
WARNING: Please use the 0.2.x releases if you plan on using it in Rails <= 3.0.x
Solución: Desinstalé la gema mysql2 con gem uninstall mysql2
y luego modifiqué la línea en mi gemfile para leer:
gem ''mysql2'', ''< 0.3''
Esto instaló la versión 0.2.7 de la gema mysql2, que también se instaló en Heroku con éxito.
Gotcha # 3: después de instalar la versión correcta de la gema mysql2, un heroku rake db:migrate
aún devolvió el mismo error:
rake aborted!
!!! Missing the mysql2 gem. Add it to your Gemfile: gem ''mysql2''
Bien, hice más investigación y encontré este hilo , que básicamente me dijo que el adaptador estaba tratando de usar el adaptador "mysql" en lugar del adaptador "mysql2".
Solución: La forma de evitar esto es configurar manualmente DATABASE_URL
en heroku config
para usar mysql2://
al hacer esto:
heroku config:add DATABASE_URL=mysql2://user:[email protected]/databaseName
(Puede encontrar la parte "dbInstanceName.hostname.us-east-1.amazonaws.com" de esta url en su panel de configuración de AWS haciendo clic en la base de datos que está usando)
Esto se debe hacer usando la herramienta de línea de comandos y no se puede agregar usando la GUI del complemento RDS en el panel de control web, porque Heroku no lo aceptará como una URL de db válida allí.
Gotcha # 4: Las configuraciones de seguridad incorrectas no devolverán errores informativos o útiles.
Solución: asegúrese de haber agregado un grupo de seguridad a su configuración de RDS para permitir que Heroku acceda a su instancia de RDS y haya agregado ese grupo de seguridad a su instancia. Para ayuda de CLI al hacer esto, puede ver los documentos de RDS en Heroku o iniciar sesión en su consola de AWS y hacer esto:
- Haga clic en la pestaña RDS en la parte superior.
- Haga clic en Grupos de seguridad de DB en la columna izquierda
- Haga clic en "Crear grupo de seguridad DB"
- Ingrese un nombre y una descripción (ej: Nombre: Heroku, Descripción: ¡Permita el acceso a Heroku! ")
- En el panel inferior, con el nuevo grupo seleccionado, cree una nueva autorización seleccionando "Grupo de seguridad EC2" en el menú desplegable.
- Para el Grupo de seguridad, ingrese: "predeterminado" y la ID de la cuenta de AWS, ingrese: "098166147350" (Esto es importante; este número de cuenta pertenece a Heroku y debe agregarse al grupo de seguridad predeterminado para que funcione).
- Haga clic en "Agregar"
- ¡IMPORTANTE! Modifique la base de datos existente y agregue el nuevo grupo de seguridad.
Entonces, para recapitular, si has:
- Instala la versión correcta de la gema mysql2 (<0,3)
- Configure su configuración de heroku para usar el adaptador mysql2 configurando la DATABASE_URL correctamente.
- y se aseguró de que Heroku tenga acceso a su RDS creando el grupo de seguridad adecuado en AWS RDS y agregó ese grupo de seguridad a su base de datos,
Ahora debería poder utilizar RDS con su aplicación Rails 3 en heroku. :)