aplicación Rails con 2 bases de datos: 1 se usa para leer datos y la otra se usa para escribir datos

Necesitaba importar algunos datos heredados de una base de datos sqlite3 a mi aplicación Rails con una base de datos postgresql. Así que creé un modelo de "negocios" con todos los tipos de columna de la base de datos sqlite3 heredada. Cambié el archivo base de datos.yml, etc etc... En el modelo business.rb agregué esta línea:

class Business < ActiveRecord::Base

establish_connection "citylistings_development"
end

Esto me permitió conectarme a la base de datos sqlite3 y creé un archivo index.html.erb donde podía ver el contenido en mi navegador.

En el controlador mi código era este:

class BusinessesController < ApplicationController
def get_all
  @businesses = Business.all
end

def create_db_entries
 self.get_all
end

def index
respond_to do |format|
  format.html #index.html.erb

end
end
end

Ahora noté que cuando creé el modelo "business.rb Creó la tabla en mi base de datos postgresql.

Sin embargo, claramente está leyendo los datos de mi base de datos sqlite3 porque se está conectando a esa base de datos.

Mi pregunta es esta

¿Cómo escribo los datos que se envían al archivo index.html.erb en la base de datos pg? ¿Es esto posible?

¿Puede una instancia de Model conectarse a 2 bases de datos a la vez y leer de 1 y escribir en otra?

Sé que una forma de resolver esto sería crear otro modelo "tempbiz" que escribirá entradas en la base de datos pg mientras que el modelo "comercial" lee desde la base de datos sqlite3. ¿Qué me gustaría saber si el modelo de "negocio" puede hacer ambas tareas?

Muchas Gracias


EDITAR Aquí está mi base de datos.yml según el comentario a continuación (he excluido todas las cosas comentadas)

#===============================================================================
development:
 adapter: postgresql
 encoding: unicode
 database: XXX_development
 pool: 5
 username: XXX
 password: XXXX
#===============================================================================
citylistings_development:
 adapter: sqlite3
 database: db/citylistings.sqlite3
 pool: 5
 timeout: 5000

preguntado el 03 de mayo de 12 a las 15:05

podría ser útil de alguna manera, al menos es bueno saberlo: github.com/tchandy/octopus -

publique su base de datos.yml, ¿es extraño que la tabla de negocios se haya creado en pg db? No creo que puedas dividir un modelo como quieras, solo tendrás que crear un bucle, leer desde el legado y escribir en pg db. -

Se agregó la base de datos.yml. Consulte la sección editada anterior. Gracias.

2 Respuestas

Vi una presentación sobre este tema y necesitas verificar la gema de la segunda base. Para citar su documentación, "SecondBase agrega una segunda base de datos a su aplicación. Mientras que Rails le permite establecer conexiones a tantas bases de datos externas como desee, Rails solo puede administrar una sola base de datos con sus tareas de migración y prueba".

https://github.com/karledurante/secondbase

Fue creado exactamente por la razón por la que lo necesita. Tenían una base de datos heredada que necesitaban importar.

Saludos, Sean

contestado el 03 de mayo de 12 a las 16:05

Esto será nativo en Rails 6.

class AnimalsBase < ApplicationRecord
  connects_to database: { writing: :animals, reading: :animals_replica }
end

Este es el PR que lo presentó.

Respondido 02 Abr '19, 20:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.