2012-02-29 43 views
0

我有一个托管在heroku上的rails应用程序和一个用罗德制作的移动应用程序。如何从json请求将图像直接发布到heroku应用的s3上?

我想使用HTTP POST请求将图像从移动应用程序发送到我的Rails应用程序。由于heroku不允许你存储文件,我使用的是亚马逊s3。

我无法将文件从heroku发送到s3,因为它需要超过30秒并导致超时。当用户有一个表单时,我已经看到了很多直接向s3上传文件的例子,但是在这种情况下这显然不起作用。

我想在这里使用建议:

rails 3, heroku, aws-s3, simply trying to upload a file to S3 that is POSTed (http/multipart) to our app

,但我仍然获得了503请求超时。

我不想把我的亚马逊s3键放在应用程序上。

现在,我觉得我唯一的选择是在EC2上托管我的应用程序,我宁愿不这样做,因为我喜欢Heroku的简单性。

此外,似乎很奇怪,无论这些上传会花费那么长时间。我只从手机相机发布图片,所以它们不是大文件。

+0

什么是你不想把你的S3密钥放到你的应用环境中的原因(你不想把它们放在代码中,这是肯定的) – 2012-02-29 23:33:31

+0

也许我不清楚。我显然会在我的heroku应用程序中使用我的s3键。我只是不希望他们在移动应用程序。我曾想过让手机应用程序暂时从heroku应用程序下载s3密钥,但这仍然使得密钥被盗非常容易。 – NielMalhotra 2012-03-01 00:05:44

+0

我认为把你的S3钥匙放在你的移动应用程序中是唯一的答案。 – 2012-03-01 13:50:47

回答

0

所以我终于想出了如何做到这一点。

经过AWS代表和Cloudfiles代表的大量反复讨论并将我的头发拉出来之后,我意识到只要获得另一个可以写入文件系统的rails服务器就会少得多。

因此,我在openshift上启动了另一个rails应用程序。就像Heroku一样容易上手(实际上,我可能会考虑将我的Rails应用程序移到那里,但现在对我来说太新了,而且Heroku没有围绕它的社区)。

然后,我只需要在我的两个rails应用程序之间进行通信。

我知道这不是最好的/可扩展的/优雅的修补程序,但它完成了工作,而这正是最终的重点!

2

我在工作中遇到了同样的错误。有些人说要解决这个问题的唯一方法是将文件直接上传到S3存储桶。在我们的例子中这很难,因为我们使用了Paperclip Gem for Rails和不同大小的图像版本。

其他一些人说:“The Heroku timeout is a set in stone thing that you need to work around. Direct upload to S3 is the only option, with some sort of post-upload processing required”,所以我建议做下:

也许这不是一个解决方案,但它可能是非常有用的,它是我在Rails应用程序:

Worker Dynos, Background Jobs and Queueing

或许你应该将这个重任转换成可从您的网络请求异步运行后台作业。

问候!

相关问题