De la documentación heroku en el read-only filesystem:
Hay dos directorios que se pueda escribir: ./tmp y ./log (bajo la raíz de su aplicación). Si desea soltar temporalmente un archivo mientras dura la solicitud, puede escribir en un nombre de archivo como # {RAILS_ROOT}/tmp/myfile _ # {Process.pid}. No hay garantía de que este archivo estará allí en las solicitudes posteriores (aunque podría ser), por lo que no debe utilizarse para ningún tipo de almacenamiento permanente.
Usted debe ser capaz de escribir con bastante facilidad sus archivos XML generados a tmp/
y llevar un registro de los nombres, descarga y escribir los archivos s3 en el mismo directorio, y (tal vez?) Invocar un comando zip, siempre y cuando la salida está en tmp/
, luego sirva el archivo en el navegador con el tipo de mime correcto para solicitar una descarga. Solo me preocuparía qué tan grande es el tamaño del archivo y si heroku tiene un límite no documentado sobre lo que permitirán en el directorio tmp. Especialmente dado que solo está realizando esta acción para una descarga única durante la duración de una sola solicitud, creo que tiene muchas posibilidades de poder hacerlo.
Editar: Mirando un poco, podría ser capaz de usar algo como RubyZip para crear su archivo zip si desea evitar llamar a los comandos del sistema.
Bien Brett, esto suena como un ganador. En primer lugar, creo que solo necesitaríamos el zip para la duración de la solicitud. Si es necesario por más tiempo podemos moverlo hasta s3 ... Sí, parece factible. ¡Aclamaciones! – digitalWestie
rubyzip tiene problemas al crear archivos zip que son compatibles con Windows. rubyzip2 tiene los mismos problemas y también la gema zip. –