2012-02-29 69 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

或許你應該將這個重任轉換成可從您的網絡請求異步運行後臺作業。

問候!

相關問題