¿Cómo hacer que una base de datos externa esté disponible para Vistas?

8

Hay mucha discusión aquí y en otros lugares sobre el uso de bases de datos externas en Drupal. Lo que he descubierto de eso es:

  • La mejor manera de trabajar con datos en una tabla de base de datos es usar el módulo Vistas. Lo instalé y comencé a usarlo, y descubrí que es excelente para trabajar con una tabla que agregué a la base de datos del sitio.
  • La forma fácil de hacer que Vistas funcione con una tabla que no fue creada por Drupal es con el módulo de Datos. Este módulo trata cualquier tabla en la base de datos del sitio que Drupal no esté usando como una "tabla huérfana" y permite que sea "adoptada" con solo hacer clic en un botón.
  • El módulo "Asistente de tabla" aparentemente proporciona una forma de hacerlo con tablas que no están en la base de datos del sitio. Pero ese módulo no está disponible para Drupal 7.
  • El archivo "settings.php", en la sección "Configuración de la base de datos", tiene documentación detallada sobre cómo definir bases de datos adicionales con las que el sitio puede trabajar. Pero cuando una base de datos se define de esa manera, sus tablas no aparecen en la lista de tablas huérfanas en el módulo de datos.

El cambio que he realizado en la definición de la base de datos en el archivo "settings.php" de uno de mis sitios es:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

Tengo una tabla que quiero usar en más de un sitio en mi instalación multisitio. Esto significa que necesito tener la tabla en una base de datos que sea accesible para cada sitio. Según la lectura que he hecho, mis opciones para hacerlo son:

  1. Lo mejor, si es posible: descubra que hay una manera de hacer que el módulo de datos reconozca las tablas en la base de datos adicional definida en "settings.php", para que pueda adoptarlas.
  2. Use prefijos de tabla para permitir que todos los sitios usen una base de datos.
  3. El módulo " Informes de Forena " parecía hacer exactamente lo que necesitaba, pero cuando lo instalé, no pude hacerlo funcionar. Presenté tema 2475645 y no puede hacer mucho más allá a menos que haya una solución para ese problema.
  4. Escribir mi propio módulo para dar acceso a Vistas a la base de datos adicional definida en "settings.php".
  5. Instale Drupal 6 con Table Wizard y utilícelo para obtener Vistas para ver mi tabla externa, y luego de alguna manera tome el resultado de eso y póngalo en Drupal 7. (Esto se ha sugerido en algunas publicaciones).
  6. Siga el procedimiento en https://drupal.stackexchange.com/a/3321/45991 , que comienza con la instalación de un parche y parece que también requiere la creación de mi propio módulo.
  7. También he mirado los módulos Feeds, Feeds SQL, Views XML Backend y Migrate, pero ninguno de ellos dice que pueden conectar un db externo a Views. ¿Me estoy perdiendo de algo? ¿Es uno de ellos la solución correcta?

La opción 2 no es práctica porque daría como resultado una gran base de datos con cientos de tablas que serían muy difíciles de administrar. He estado haciendo grandes progresos para comenzar a utilizar Drupal, pero no me siento a la altura de la tarea de 4, 5 o 6. ¿Existe alguna posibilidad de que algo como la opción 1 funcione? ¿O hay alguna otra forma de hacer que las Vistas funcionen con una tabla fuera de la base de datos del sitio sin poder escribir mi propio módulo?

Dos detalles adicionales: la primera tabla con la que necesito trabajar es bastante grande, más de 6,000 filas y aproximadamente 20 columnas. No hay intención de dar a los visitantes del sitio acceso a la base de datos, excepto por la información extraída del contenido de la página.

Gracias por tu ayuda.

NewSites
fuente

Respuestas:

2

Creo que el módulo Forena hace exactamente lo que necesita . Creo que su problema de configuración es solo una solicitud de soporte, no es algo que requiera una "solución". Después de resolverlo, incluso tendrá la opción de usar sí o no su integración de vistas también.

El problema de Forena que creó está muy bien documentado (¡gran trabajo!). Pero en ninguna parte dice nada sobre los permisos que otorgó (lo que me hace creer que podría estar perdiendo algunos de los permisos requeridos). Así que aquí hay un intento de abordar eso:

  • ¿Puede explicar brevemente cuál de los permisos (necesarios) relacionados con Forena que otorgó?

  • Los permisos necesarios de Forena se explican en la Guía de configuración que viene con Forena ? FYI: aquí hay una cita de (parte de):

    Forena permite mucha granularidad a la hora de informar autorizaciones relacionadas, mediante el uso de las instalaciones de administración estándar de Drupal para otorgar permisos a los roles. La lista de permisos de Drupal relacionados con Forena que se pueden otorgar puede ser un poco abrumadora al principio. Debido a que hay 3 entradas para cada fuente de datos definida, y Vanilla Forena ya viene con 3 fuentes de datos.

    Para recuperar esta guía en su propio sitio, simplemente navegue a /reports/help.setup

Esos permisos para acceder a los "datos" se retienen originalmente. Eso es por diseño, porque Forena también es bastante sensible a cualquier cosa relacionada con la concesión de acceso a datos a través de Forena. Lo que no querrá que suceda es que simplemente instalando y configurando Forena (sin permisos de administrador), puede usarlo como una solución alternativa para acceder a datos seguros.

También tenga en cuenta que, aparte de los permisos a nivel de una fuente de datos completa, tiene la opción de refinar aún más los permisos requeridos para bloques de datos específicos (= consultas SQL personalizadas). Para hacerlo, solo especifique los permisos necesarios (Drupal) dentro de la instrucción SQL (los detalles de sintaxis se incluyen en las guías de Forena). Un caso de uso típico para esto es asegurar el acceso a columnas con datos confidenciales.

Divulgación: soy co- mantenedor de este módulo,
espero que esto no viole la política del sitio sobre autopromoción .

Pierre.Vriens
fuente
Gracias por esto. No me di cuenta cuando revisé por primera vez que había cinco permisos que no se otorgaron a nadie. Ahora se los concedí al Administrador (es decir, a mí). El documento de configuración no dice por qué esos permisos se retienen originalmente y si hay una razón para no otorgarlos al administrador. Sin embargo, ahora tengo esas fuentes de datos, por lo que esto ha resuelto ese problema. ¿Hay alguna razón por la que respondiste aquí en lugar del problema que envié?
NewSites
Genial para leer el progreso! De alguna manera compensa el "voto negativo" de mi respuesta ... FYI: También respondí a través de la cola de problemas ahora. Entonces, ahora que "esto ha resuelto el problema", ¿significa eso que considera a Forena como "la" respuesta a su pregunta (que todavía no era como en la viñeta n ° 3 del PO)? FYI: Trataré de actualizar mi respuesta aquí para explicar brevemente "por qué esos permisos fueron originalmente retenidos", ¡lo cual es una buena pregunta adicional!
Pierre.Vriens
Yo no fui quien rechazó tu respuesta. Ahora acepté la suya como <u> la </u> respuesta y la voté (lo que desafortunadamente solo la devuelve a cero).
NewSites
Hm, no estaba asumiendo que @NewSites hubiera votado negativamente, en realidad he aprendido a vivir con votos negativos. Personalmente, no me gusta el voto negativo en general, e ignoro a cualquiera de ellos cuando no hay comentarios para explicarlos de alguna manera. Pero, por supuesto, "votar" y "aceptar" es muy apreciado. Y, por supuesto, sabiendo que hay otro usuario de Drupal que parece haber descubierto Forena ahora, ¡ya está! Asegúrese de presentar los problemas (¿soporte?) Cuando corresponda (para ver también el soporte en el trabajo ...).
Pierre.Vriens
2

He hecho esto con éxito de dos maneras diferentes:

Utilice una vista SQL para crear una tabla virtual en db_localque se refiere a la tabla correspondiente en db__extra. La consulta para crear que se vería así:

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

Luego puede referirse a esta Vista SQL como si fuera una tabla nativa en su base de datos Drupal, y ni siquiera necesita agregar la base de datos externa en settings.php. Tenga en cuenta que esto podría no ser compatible con el módulo de datos (consulte https://www.drupal.org/node/1973806 ), pero debería poder describir la vista SQL al módulo de vistas de Drupal mediante la implementación hook_views_data()y dejar de usar el módulo de datos .

Aquí hay otra posibilidad: use prefijos de tabla selectivos para engañar a Drupal para que reescriba {some_table} a db__extra.some_table. Esto no es lo mismo que prefijar sus tablas de Drupal.

Su $databasesconfiguración se vería así:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

Nuevamente, no estoy seguro de si esto es compatible con el módulo de datos, ya que no lo uso. Pero debería funcionar con Vistas si se implementa usted hook_views_data()mismo.

Les lim
fuente
Dices en ambos métodos que necesito implementar <code> hook_views_data () </code>. ¿No requiere eso escribir un módulo? En cualquier caso, probé la definición de la base de datos en su segundo método. No hizo que la tabla en "db_extra" apareciera en la lista de tablas huérfanas del módulo de datos. En su primer método, ¿dónde pongo la consulta que sugirió (si no está en un módulo personalizado)?
NewSites
Si está creando una vista SQL, debe ejecutar la consulta CREAR VISTA una vez en MySQL directamente. No necesita volver a ejecutarse.
Les Lim
Lo siento, todavía no entiendo. ¿Dónde quieres que ejecute esta consulta? En phpMyAdmin? ¿Eso me dará algo que pueda usar en Views? Busqué "vista SQL" en Drupal.org y obtuve drupal.org/project/sql_views , que no tiene descarga de producción y cuyo documento en drupal.org/node/2458947 dice que necesito implementar un gancho (que supongo que significa escribir un módulo) para decirle al módulo Vistas sobre mi vista SQL. Entonces, parece que lo que estás sugiriendo requiere escribir un módulo (para el que no me siento preparado), y si no, simplemente no entiendo lo que me estás diciendo que haga.
NewSites