2010-09-20 5 views
1

mon application Rails3 a une certaine requête qui génère un gros fichier CSV (20mb +) à la volée, puis invite l'utilisateur à télécharger le fichier (pendant sa génération). J'ai remarqué lors de la mise à niveau de Rails 2.3.x en utilisant "render: text => proc" ne fonctionne plus. Je travaille maintenant sur une solution qui me permettra de continuer à travailler de la même manière.Rails3 générer et diffuser de gros fichiers

Le fait que le fichier soit généré à la volée n'a pas encore causé de douleur. Seuls certains utilisateurs peuvent accéder à cette fonctionnalité (pensez aux rapports mensuels, etc.).

Je prévois essentiellement sur deux approches différentes, 1. ajouter un moteur de rendu personnalisé qui me laisser utiliser un proc nouveau 2. Générez le fichier dans un thread, et utiliser « send_data » pour essayer de diffuser le fichier en tant que il est généré.

Je n'ai pas encore implémenté, donc si quelqu'un peut donner un aperçu, cela peut aider à clarifier les choses à mesure que le code est mis à jour.

Merci !!!

+0

en double de http://stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client – John

Répondre

0

Je suis en train de travailler sur un problème très similaire, et j'ai décidé d'utiliser csv_builder pour ajouter du support de streaming. J'ai une version de prototype fonctionnante, qui a un gestionnaire de modèle retourne un proc plutôt qu'une chaîne. A l'intérieur du proc, je câble le csv_builder pour écrire directement dans le flux de sortie. Il y a quelques trucs loufoques que j'ai dû utiliser pour le faire fonctionner en test et en développement, parce que la sortie de TestResponse n'est pas le flux io complet que CSV attend.

un coup d'oeil: https://github.com/fawce/csv_builder