aplicación Rails con 2 bases de datos: 1 se usa para leer datos y la otra se usa para escribir datos
Frecuentes
Visto 1,245 veces
2
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
2 Respuestas
1
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
0
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 ruby-on-rails ruby activerecord connection or haz tu propia pregunta.
podría ser útil de alguna manera, al menos es bueno saberlo: github.com/tchandy/octopus - apneadiving
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. - RadBrad
Se agregó la base de datos.yml. Consulte la sección editada anterior. Gracias. banditKing