marciomr / 13M

Other
2 stars 2 forks source link

Não perder o trabalho caso pare na metade #53

Closed marciomr closed 8 years ago

marciomr commented 8 years ago

Preciso verificar se a página já existe. Se ela já existir não preciso criar uma nova.

andrechalom commented 8 years ago

Quando o trabalho é interrompido e recomeçado, algo quebra no modelo. Quando eu dou Ctrl-C no meio de baixar um post digamos do dia 14/03 14:00, quando eu tento recomeçar o programa, ao invés de baixar tudo, ele está baixando só a partir do próximo post (p ex dia 14/03 02:00). MAS isso não quer dizer que os dados estão sendo salvos: baixei todos os posts do PSOL, perdi a saída e agora não consigo mais ver o resultado. Quando rodo o programa ele diz:

Conectando...
Baixando posts de PSOL 50 - Partido Socialismo e Liberdade...
Serão processados todos os posts até dia 15/02/2016.
Isso pode levar várias horas.
12/02/2016 21:00:00
Calucalando quantos a intersecção dos conjuntos...
PSOL 50 - Partido Socialismo e Liberdade
Curtidas no último mês: 0
Número de usuários que confirmaram presença nos eventos: 0

O único meio que eu vi de reverter esse estado é revertendo o banco de dados (git checkout 13M.db). Então, cuidado. Isso pode comprometer os resultados! Certifique-se de que o batchs já enviados não foram interrompidos e reiniciados!

andrechalom commented 8 years ago

Update: os posts estão sendo salvos, mas o objeto de página é recriado a cada vez que o programa inicia. Isso faz com que o modelo se perca, porque de um lado o post está lá no BD, mas por outro ele está associado à página numero 45 (no banco de dados) e não a página 128 que estamos processando agora. Estou montando um Pull Request para corrigir isso.

Relacionado a isso, a linha next if !Post.where(fb_id: post['id']).empty? está pulando o post, impedindo de ser baixado, se ele já existe no banco de dados. O problema é que o post pode estar criado (por new_post = create) mas ainda não ter baixado tudo (o que acontece em new_post.likes_count). Estou englobando essas duas operações em uma ActiveRecord::Transaction, para que se o usuário cancela a operação no meio do download, a transação inteira é rolled back.

marciomr commented 8 years ago

Faz o pull request que eu incluo no código.

andrechalom commented 8 years ago

OK, isso está corrigido. Acho q vc pode fechar o issue