2010-09-26 29 views
1

Je suis en train de faire une image d'un graphique à l'aide parCréer une image avec ruby-graphviz, l'envoyer à s3 depuis heroku?

@graph.output(:output => "png", :file => "public/images/graph.png") 

rubis graphviz Depuis que je suis en utilisant Heroku, comment puis-je enregistrer l'image locale et l'envoyer à un seau à s3, ou tout simplement envoyer il directement au seau s3? J'apprécierais toute aide.

Répondre

1

Il y a deux répertoires qui sont inscriptible: ./tmp et ./log (sous votre racine de l'application). Si vous souhaitez déposer un fichier temporairement pour la durée de la demande, vous pouvez écrire à un nom de fichier comme #{RAILS_ROOT}/tmp/myfile_#{Process.pid}. Il n'y a aucune garantie que ce fichier sera là sur les demandes suivantes (bien que ce pourrait être), donc cela ne devrait pas être utilisé pour un type de stockage permanent .

http://docs.heroku.com/constraints

0

Vous pouvez donc écrire dans le répertoire tmp/ sous votre racine de l'application, aussi longtemps que vous ne vous attendez pas à être là à la prochaine requête. Vous devez donc tout faire dans un cycle de demande (ou un travail retardé).

Voici ce que vous devez faire. Exécutez n'importe quel script pour générer votre fichier et écrivez-le à tmp/. Ensuite, utilisez quelque chose comme Paperclip avec le backend S3 pour enregistrer le fichier sur S3. Assurez-vous d'utiliser le backend de stockage S3 (Paperclip utilise le FS par défaut); Au lieu de vidage écrit dans le système de fichiers, il utilise la gemme AWS :: S3 pour les télécharger vers S3. Vous pouvez en lire plus à ce sujet dans le rdoc ici: http://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb

Ou vous pouvez toujours le télécharger sur S3 en utilisant n'importe quelle gemme ou bibliothèque que vous aimez. J'utilise cette méthode dans une application web de production en couple. Vous ne pouvez pas compter sur tmp/être là entre les demandes, mais dans un il est fiable ici.