2012-02-29 11 views
0

私はherokuでホストされているレールアプリとrhodesで作られたモバイルアプリを持っています。jsonリクエストからherokuアプリでs3に直接画像を投稿するには?

HTTP POSTリクエストを使用してモバイルアプリから自分のアプリに画像を送信したいとします。 herokuではファイルを保存できないので、amazon 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要求タイムアウトを取得します。

アプリにamazon s3キーを入れたくありません。

今のところ、私の唯一の選択肢は、EC2で私のアプリをホストすることだと思うが、私はHerokuのシンプルさが好きなので、やっていないだろう。

また、アップロードに時間がかかりすぎると思われます。私は唯一の携帯電話のカメラから画像を投稿しているので、彼らは巨大なファイルではありません。

+0

S3キーをアプリケーション環境に配置したくない理由は何ですか(コードに入れたくないのは確かです) –

+0

多分私は明確ではありませんでした。私は明らかに私のヒーローアプリにs3キーを持っています。私はちょうどモバイルアプリでそれらを望んでいない。私は、モバイルアプリケーションがherokuアプリからs3キーを一時的にダウンロードすることを考えましたが、それでもキーが盗まれるのはかなり簡単です。 – NielMalhotra

+0

あなたのモバイルアプリにS3キーを置くことが唯一の答えだと思います。 –

答えて

0

だから、これをどうやって行うのかが分かりました。

AWSの担当者とCloudfilesの担当者が多く、私の髪を引き出した後、ファイルシステムに書き込むことのできる別のレールサーバーを手に入れることが非常に少ないことに気付きました。

私はオープンシフトで別のレールアプリを開始しました。それはHerokuと同じくらい簡単です(実際には、私のレールアプリをそこに移動することを検討するかもしれませんが、今は自分の好みでは新しく、Herokuが行うコミュニティはありません)。

次に、私は2つのレールアプリ間で通信する必要がありました。

私はそれが最高の/スケーラブルでエレガントな修正ではないことを知っていますが、それは仕事を終えました。

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

おそらく、この重い吊り上げを、ウェブリクエストから非同期に実行できるバックグラウンドジョブに移行する必要があります。

よろしくお願いいたします。

関連する問題