Si Heroku usa PostgreSQL, ¿cómo puede una aplicación Rails local que utiliza una base de datos MySQL o SQLite funcionar perfectamente con ella?

Conexión:

Heroku reemplaza su database.yml por el suyo, que contiene información sobre cómo conectarse a sus servidores de bases de datos.

Consulta:

Heroku afirma que mientras no se utilicen consultas específicas de la base de datos, su aplicación funcionará bien. [1]

Las aplicaciones Rails generalmente usan una capa llamada ActiveRecord para abstraer el acceso a la base de datos. Los adaptadores ActiveRecord para los motores de bases de datos más comunes se incluyen con Rails por defecto [2], cada uno de los cuales está escrito para dar cuenta de las idiosincrasias de la base de datos que representan.

Cuando su aplicación se inicia por primera vez, Rails busca en su directorio de configuración un archivo database.yml que defina qué adaptador ActiveRecord usará para su aplicación. Cuando accede a sus datos utilizando los diversos métodos de sus modelos, el adaptador que se especificó anteriormente ejecuta las consultas apropiadas detrás de escena. Esto hace posible intercambiar diferentes archivos database.yml en diferentes sistemas: la aplicación no se preocupa por el motor de base de datos en el que se está ejecutando.

Migraciones:

ActiveRecord también le permite mover su esquema de base de datos de un sistema a otro. Debido a que el esquema está representado, no como una secuencia de consultas a la base de datos, sino como un código ruby ​​en forma de archivos de migración o el archivo schema.rb, la aplicación solo necesita saber qué adaptador usar antes de generar y ejecutar las consultas apropiadas necesarias para recrearlo

[1] http://devcenter.heroku.com/arti…
[2] https://github.com/rails/rails/t…

La respuesta corta es que un mapeo relacional de objetos proporciona una abstracción en su código sobre las transacciones reales de la base de datos. El ORM le permite acceder a las propiedades y relaciones de un modelo sin escribir la consulta de la base de datos usted mismo. Esta abstracción es posible debido a los controladores de la base de datos, escritos como gemas, que proporcionan el pegamento que conecta la bonita sintaxis ORM con las entrañas subyacentes.

Entonces, ¿por qué MySQL simplemente funciona? Primero, hay un controlador para él, y es intercambiable con el controlador sqlite. En segundo lugar, su archivo config / database.yml proporciona configuraciones para diferentes implementaciones. Cuando está ejecutando en su máquina doméstica, es probable que esté trabajando en una implementación de desarrollo, que por defecto usa SQLite, porque es una base de datos de configuración mínima. Cuando avanza a heroku, se ha “desplegado” y heroku puede cambiar su despliegue a “producción”, que tendrá un conjunto diferente de opciones de configuración, como cambiar los controladores de la base de datos.

En cuanto a por qué MongoDB no “solo funciona”, esto se debe a la diferencia entre las arquitecturas de la base de datos. SQLite, MySQL y PostgreSQL son todas bases de datos SQL: requieren un esquema y una estructura rígidamente definidos para todo el contenido. Ejemplo: cada tabla tiene columnas con un tipo de datos definido. Todos los datos deben ajustarse a una tabla. Por el contrario, MongoDB es una base de datos “NoSQL”. NoSQL funciona de manera muy diferente en que no tiene esquema (es posible que desee buscar una respuesta más profunda si está interesado). Debido a esta diferencia, el mismo ORM no se aplica limpiamente, aunque hay otras gemas ORM disponibles (¿mapa de datos o mongoide?).

Personalmente, te recomiendo que uses PostgreSQL en Heroku. Es muy simple y muy poderoso.

PostgreSQL es una base de datos relacional, de código abierto y muy potente. Tiene más de 20 años de desarrollo y tiene una arquitectura probada y confiable. Se adopta comúnmente en muchas aplicaciones debido a las siguientes ventajas:

  • Un RDBMS compatible con el estándar SQL de código abierto
  • Comunidad fuerte
  • Fuerte apoyo de terceros
  • Extensible
  • Objetivo

Heroku simplifica la infraestructura de las aplicaciones web. Con su arquitectura, es posible crear aplicaciones robustas, manejables y escalables de acuerdo con las necesidades de su negocio.

La idea principal de Heroku es eliminar el dolor de administrar y escalar servidores, para que pueda concentrarse en el desarrollo de su producto y ofrecer más funcionalidad a su cliente, donde Heroku es responsable de la infraestructura.

No necesita conocimientos de servidores para crear una aplicación sólida con millones de usuarios en todo el mundo.

Si quieres aprender sobre Heroku Postgres, te recomiendo este libro: Learning Heroku Postgres