Errores #4029
cerradaError en vista SQL de presupuesto
100%
Descripción
Al obtener la información de presupuesto de un proyecto, el sistema devuelve error:
ActionView::Template::Error (Mysql2::Error: View 'gesproei_pruebas.v_presupuesto' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them: SHOW FULL FIELDS FROM `v_presupuesto`): 1: <!-- Cofinanciacion publica y privada --> 2: <% cofinanciador_publico = Agente.where(:sistema => true, :publico => true) %> 3: <% cofinanciador_privado = Agente.where(:sistema => true, :publico => false) %> 4: <% cofinanciador_publico_total = VPresupuesto.sum_total(proyecto: @proyecto.id, agente: cofinanciador_publico, agente_rol: "financiador") %> 5: <% if @proyecto.convenio? %> 6: <!-- Para convenios, recorremos todos los pacs para calcular la suma de lo cofinanciado en todos ellos --> 7: <% cofinanciado_publico_valor = 0 %> app/models/v_presupuesto.rb:44:in `block in <class:VPresupuesto>' app/views/info/_contexto_proyecto.html.erb:4:in `_app_views_info__contexto_proyecto_html_erb___4208118200238511471_70264800574420' app/views/info/_proyecto_detalle_cajas.html.erb:3:in `_app_views_info__proyecto_detalle_cajas_html_erb___2622940814492725212_70264803167900' app/views/info/proyecto.html.erb:6:in `_app_views_info_proyecto_html_erb__4509398014714540645_70264809551240' app/controllers/info_controller.rb:56:in `index'
Esto puede tener que ver con el ultimo commit en vistas?:
https://git.semillasl.com/gong/gor/-/commit/7ffe35d34b5bbee1a64a0c98401305de84ae0fea
PD: Aunque sospecho que no tiene que ver, se ha hecho una cambio que creo que no es correcto:
- DROP TABLE IF EXISTS v_presupuesto; + DROP VIEW IF EXISTS v_presupuesto;
La intención del "drop table" tal y como lo describen los comentarios es la de "Por si la vista hubiera sido importada como tabla, la eliminamos primero" y es por que en ocasiones un dump de BBDD exporta estas vistas como tablas resultando imposible crearlas luego de nuevo como vistas.
Actualizado por Jaime Ortiz hace más de 4 años
Las vistas han tenido dos cambios:
1 ) El ultimo el que comentas. Introduje lo de
DROP VIEW
Para poder tener un rake db:drop_views. Esto no es imprescindible pero viene bien para cuando se modifica algo del modelo que afecta a las views y antes de correr los migrates ejecutas el (rake drop:views) para que no se quejen de que las views se han quedado mal. Que conste que habría otras opciones de solución.
En cualquier caso, se puede mantener también el tema del:
DROP TABLE
Para el caso que estas comentando de que se importen en vez de como views como tables.
2 ) Aparte de esto las views las modifique con un cambio que tampoco es necesario:
Esto es por las traducción de las partidas. Hago que por defecto el campo que pillen las vistas para el nombre de las partidas sea "nombre_es". Esto aparte de no riguroso (no siempre tiene que ser el idioma por defecto español) en realidad no se utiliza por que los resúmenes no pillan el nombre de la partida de la propia view.
¿Puede estar dando problemas este segundo cambio?
¿Has ejecutado un rake db:views ?
Tanto 1) como 2) se pueden revertir y hacer de otra forma.
Actualizado por Santiago Ramos hace más de 4 años
mmm... esto se esta complicando... he probado a hacer otro db:migrate por si me faltara algo y ahora me salta otro error:
mysqldump: Couldn't execute 'SHOW FIELDS FROM `v_gasto`': View 'gesproei_produccion.v_gasto' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356) rake aborted! failed to execute: mysqldumpPlease check the output above for any errors and make sure that `mysqldump` is installed in your PATH and has proper permissions.
Actualizado por Santiago Ramos hace más de 4 años
Ah... a la pregunta anterior: si, la instancia donde ha saltado el error esta dockerizada y siempre pasa la siguiente secuencia al arrancar:
rake db:migrate rake db:seed rake db:views
Actualizado por Jaime Ortiz hace más de 4 años
Santiago Ramos escribió:
mmm... esto se esta complicando... he probado a hacer otro db:migrate por si me faltara algo y ahora me salta otro error:
[...]
Hola!
Este es el motivo de ejecutar antes el:
rake db:drop_views
Es decir, como cambiamos algo del modelo que afecta a las vistas salta el mensaje que te ha saltado.
> mysqldump: Couldn't execute 'SHOW FIELDS FROM `v_gasto`': View 'gesproei_produccion.v_gasto' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them (1356) > rake aborted! > failed to execute: > mysqldumpPlease check the output above for any errors and make sure that `mysqldump` is installed in your PATH and has proper permissions.
Posiblemente sea mejor opción ponerlo en el migrate a mano (hacer drop de todas las vistas), por que si te enteras ya cuando te ha saltado el mensaje.
Osea para que todo fuese bien sería:
rake db:drop_views
rake db:migrate
rake db:views
Pero vamos aunque el orden no sea el correcto y aunque no ejecutes el rake db:drop_views el tema te debería funcionar correctamente.
Te pido disculpas por el jaleo, por que realmente sería mejor haber metido el borrado de las vistas en el migrate y listo.
Gracias!
Actualizado por Santiago Ramos hace más de 4 años
- Estado cambiado de Nueva a Resuelta
- % Realizado cambiado de 0 a 100
Ok, aclarado.
Pues entonces dejo mi entrypoint asi:
if [ "${RUN_MIGRATIONS:-false}" == "true" ] then rake db:drop_views rake db:migrate rake db:seed rake db:views rake oei_erp_db:migrate rake oei_erp_db:seed rake oei_cuadro_mando_db:migrate rake oei_cuadro_mando_db:seed fi