2011-12-12 21 views
0

所以我有一些工作代码使用回形针上传pdf到s3(here)。该代码将PDF分成jpg /页面,并将它们分别上传到s3。直接将PDF上传到S3并在后台进程中将PDF分成一个jpg每页

此代码不适用于较大文件的Heroku(我可能只需要最多10MB文件),因为heroku的超时时间为30秒。

我觉得简单地把上传放在后台进程(delayed_pa​​perclip gem?)中仍然会导致超时,而且我需要将文件直接上传到s3。我见过我可以用gem carrierwave_direct做到这一点。

所以那么现在的问题是如何有以下代码:

def make_manual_pages 
    if valid? 
    Paperclip.run('convert', "-quality #{ManualPage::QUALITY} -density #{ManualPage::DENSITY} #{manual.url} #{manual.url}%d.png") 
    images = Dir.glob("#{set_ups.url}*.png").sort_by do |line| 
     line.match(/(\d+)\.png$/)[1].to_i 
    end 

    images.each do |page_image| 
     manual_pages.build(:image => File.open(page_image)) 
    end 
    FileUtils.rm images 
    end 
end 

与carrierwave_direct工作。

或者也许我正在接近这个问题错了..因为我甚至没有看到如果我直接上传到s3,我怎么能对图像进行处理。也许我需要直接上传文件,然后让heroku访问图像并进行处理?任何帮助将不胜感激。

回答

1

carrierwave_direct的优点和问题是您的文件仅存储在s3和s3上。 Carrierwave_direct有一些功能可以处理上传到s3的文件,但它们都会先将文件下载到服务器,然后处理它,然后将其重新上传到s3,以便在主机上完成所有处理。

如果你需要做一些类似于你的处理,carrierwave_direct不会帮你。

一个解决方案是在亚马逊上产生虚拟机来处理你的文件。我不知道如何转让s3和ec2之间的转账,但它不会再转回到heroku。

相关问题