Создать образ с помощью ruby-graphviz, отправить его на s3 из heroku? - PullRequest
1 голос
/ 26 сентября 2010

Я пытаюсь создать изображение графика с помощью ruby-graphviz с помощью

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

Поскольку я использую heroku, как я могу сохранить изображение локально и отправить его в корзину s3или просто отправить его прямо в ведро s3?Буду признателен за любую помощь.

Ответы [ 2 ]

1 голос
/ 26 сентября 2010

Есть две директории, которые доступный для записи: ./tmp и ./log (под корень вашего приложения). Если вы хотите временно удалить файл для Продолжительность запроса вы можете написать на имя файла, как #{RAILS_ROOT}/tmp/myfile_#{Process.pid}. Там нет никакой гарантии, что этот файл будет там по последующим запросам (хотя это может быть), так что это должно не должен использоваться для любого вида постоянного хранение.

http://docs.heroku.com/constraints

0 голосов
/ 26 сентября 2010

Таким образом, вы можете писать в каталог tmp/ в корневом каталоге приложения, если вы не ожидаете, что он будет там при следующем запросе. Таким образом, вы должны сделать все за один цикл запроса (или одну отложенную работу).

Вот что вам нужно сделать. Запустите любой скрипт для генерации вашего файла и запишите его в tmp/. Затем используйте что-то вроде Paperclip с бэкэндом S3, чтобы сохранить файл на S3. Убедитесь, что вы используете хранилище S3 (Paperclip использует FS по умолчанию); вместо того, чтобы сбрасывать записи в файловую систему, он использует гем AWS :: S3 для загрузки их в S3. Вы можете прочитать больше об этом в rdoc здесь: http://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/storage/s3.rb

Или вы всегда можете загрузить его на S3 самостоятельно, используя любой драгоценный камень или библиотеку, какую захотите.

Я использую этот метод в паре производственных веб-приложений. Вы не можете рассчитывать на то, что tmp / находясь там между запросами, но в пределах одного это надежно там.

...