Esto me tiene desconcertado. Aquí está mysql_query:
def mysql_query(sql)
begin
#puts "Consulta: \n#{sql}"
@client.query(sql, cache_rows: true)
rescue Exception => ex
begin
ActiveRecord::Base.connection.reconnect!
rescue
puts "Error en la conexión a la base de datos, reintentando en 10 segundos"
sleep 10
puts "Hora de reintentar..."
@client.query(sql, cache_rows: true)
end
end
end
Las primeras ~5 millones de publicaciones se importaron correctamente, pero ahora, con bastante frecuencia,
posts = mysql_query(query).to_a
no devuelve el resultado de MySQL, sino esto:
[#<PG::Result:0x0000563f3ee6d8d0 status=PGRES_COMMAND_OK ntuples=0 nfields=0 cmd_tuples=0>]
He recurrido a esto:
while !posts[-1].is_a?(Hash)
puts "Publicaciones: #{posts}"
ActiveRecord::Base.connection.reconnect!
@mysql_client = Mysql2::Client.new(
host: DB_HOST,
username: DB_USER,
password: DB_PW,
database: DB_NAME
)
posts = mysql_query(query).to_a
end
Esto está detectando el problema y resolviéndolo, pero sigue fallando en casi cada consulta (a veces hasta 3 consultas de 5000 registros se ejecutan correctamente). Lo escribí como un bucle, pero creo que nunca se ejecuta más de una vez. Pensé brevemente que quizás algo más estaba usando @client e insertando una consulta PG en él, así que cambié a @mysql_client, pero eso no lo solucionó.
He buscado en Google un poco, pero no encontré nada.
Mi solución temporal está funcionando, así que supongo que está “arreglado”, pero sigo con curiosidad sobre qué podría estar causando esto.