Pergunta

Gostaria de fazer upload de documentos para GoogleDocs cada vez que o ouve OS que um arquivo foi adicionado / arrastado / salvos em uma pasta designada, apenas a forma como DropBox envia um arquivo ao salvá-lo na pasta DropBox.

O que esta tomada em Ruby, quais são as partes?

  • Como você ouvir quando um arquivo é salvo?
  • Como você ouvir quando um arquivo é adicionado a uma pasta?

Eu entendo como usar os GoogleDocs API e upload as coisas uma vez que recebo esses eventos, mas eu não sei como isso iria funcionar.

Atualizar

Enquanto eu ainda não sei como verificar se um arquivo é adicionado a um diretório, para ouvir quando um arquivo é salvo agora é simples sujeira, graças a guarda para ruby.

Foi útil?

Solução

Ruby não incluem uma forma built-in para "ouvir" se há atualizações para arquivos. Se você quiser ficar com Ruby puro, a sua melhor aposta seria a de efectuar o upload em um horário fixo (digamos a cada 5 minutos), independentemente de quando o arquivo é salvo.

Se isto não é uma alternativa aceitável, você poderia tentar escrever o aplicativo (ou pelo menos certas partes dele) em Java, que suporta este tipo de coisa. Dê uma olhada em JRuby para integrar as porções Ruby e Java do seu aplicativo.

Outras dicas

Se eu fosse confrontado com isso, eu usaria algo como git ou bzr para lidar com a verificação de versão e apenas chamar adicionar em seguida, confirmar a partir de seu roteiro e monitorar quais arquivos foram alterados (e, portanto, precisa ser carregado).

Isso adiciona o benefício de controle de versão completa sobre os arquivos e é principalmente de plataforma cruzada (se você incluir os binários para cada plataforma).

Note que este não lidar com seu problema de audição, apenas o que você faz quando você sabe que algo mudou. Você pode agendar a tarefa (via várias rotas), mas eu ainda gosto da idéia de um VCS adequada sob o capô.

Eu encontrei este: http://www.codeforpeople.com/lib/ruby / dirwatch /

Você precisa de ler sobre ele como eu não posso atestar sua eficiência ou confiabilidade. Ele parece usar SQLite, por isso talvez seja melhor apenas para verificar manualmente uma vez a cada 10 segundos (ou algo nesse sentido).

Aqui está uma jóia de rubi puro:

http://github.com/TwP/directory_watcher

Eu não sei a maneira correta de fazer isso, mas um simples truque seria ter um script executado em segundo plano, que verifica o conteúdo de um monte de pastas cada n minutos e usa as marcas de tempo associadas para determinar se o arquivo foi modificado nesse espaço de tempo

Você iria precisar de algum código OS nativo aqui, para escrever o Monitoring Service / cliente. Eu selecionar C ++, se você quer que ele seja multiplataforma. Se você decidir ir com .Net, por exemplo, você pode usar a classe FileSystemWatcher para conseguir o que você precisa ( documentação e aqui está um relacionado com o artigo ).

Tipo de uma discussão antiga, mas eu sou confrontado com fazer algo semelhante e queria jogar em meus pensamentos. A rota que eu vou é ter um script Ruby que assiste a um determinado diretório e verifica a data e hora. Uma vez que todos os arquivos foram enviados, o script salva o último timestamp e as pesquisas então o diretório novamente, verificando se todos os arquivos / pastas foram adicionados. Se os arquivos forem encontrados, então o script carrega-los e atualiza o timestamp global, etc ...

A desvantagem é que a criação de um script Ruby para executar continuamente (ou como um serviço) é um pouco doloroso. Mas não é uma tarefa imensa, só precisa ser pensada corretamente.

Também depende se os usuários são suficientes competente para ter rubi instalado ou se você tem que embalar tudo para cima em um instalador de um clique bem. Isso, para mim, é a parte mais difícil de descobrir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top