Questo mi ha lasciato perplesso. Ecco mysql_query:
def mysql_query(sql)
begin
#puts "Query: \n#{sql}"
@client.query(sql, cache_rows: true)
rescue Exception => ex
begin
ActiveRecord::Base.connection.reconnect!
rescue
puts "Connessione al database fallita, riprovo tra 10 secondi"
sleep 10
puts "Tempo per riprovare..."
@client.query(sql, cache_rows: true)
end
end
end
I primi ~5 milioni di post importati correttamente, ma ora, abbastanza spesso,
posts = mysql_query(query).to_a
restituisce, non il risultato MySQL, bensì:
[#<PG::Result:0x0000563f3ee6d8d0 status=PGRES_COMMAND_OK ntuples=0 nfields=0 cmd_tuples=0>]
Ho ricorso a questo:
while !posts[-1].is_a?(Hash)
puts "Posts: #{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
E questo sta rilevando il problema e risolvendolo, ma continua a fallire su quasi ogni query (a volte fino a 3 query da 5000 record riescono). L’ho scritta come un ciclo, ma credo che non venga eseguita più di una volta. Ho pensato brevemente che forse qualcos’altro stesse usando @client e inserendo una query PG, quindi sono passato a @mysql_client, ma ciò non ha risolto il problema.
Ho cercato su Google, ma non ho trovato nulla.
Il mio workaround funziona, quindi immagino sia “risolto”, ma sono ancora curioso di sapere cosa potrebbe causare questo problema.