6

ローカルに開発し、AmazonのElastic Beanstalkで運用するためのRails 3アプリがあります。私のアプリにはHTML形式で画像をアップロードできる場所がいくつかあります。アップロードした後、私はそのファイルを保存用にS3に送ります。私はローカルでの開発中にこのワークフローに問題はありませんが、プロダクションでは、アップロード中に500の内部サーバーエラーの応答が表示されています(私はS3との通信が始まる前です)。問題Elastic BeanstalkでホストされているRailsアプリケーションからファイルをアップロードする

私のEC2インスタンスにsshして、/var/app/support/logs/passenger.logにエラーのトレースが見つかりました。アップロード中に生成される行は次のとおりです。

2013/03/30 00:58:52 [crit] 1723#0:* 196227 open() "/tmp/passenger-standalone.1645/client_body_temp/0000000014"(2:このようなファイルまたはディレクトリはありません) 、クライアント:ip_address、サーバー:_、リクエスト: "POST/admin/users/1 HTTP/1.1"、ホスト: "www.my_domain.com"、参照先: "https://www.my_domain.com/admin/users/1/edit"

誰も知恵の言葉を持っていませんかなぜ私はRailsからElastic Beanstalkにファイルをアップロードできないのですか?

ご協力いただきありがとうございます。

+0

これはひどい新人の間違いだった私にとってから免疫することができます。私はローカルにインストールをバンドルする必要がありました。ヒロクでは、私はこの種のことについてエラーメッセージを受け取ることに慣れています。 – colllin

答えて

9

調査の結果、毎日のcronjob(/etc/cron.daily/tmpwatch)が、ファイルのアップロードに重要な乗客スタンドアロン。*ディレクトリを削除していることが問題だと思います。

アプリを再起動してアップロードを再開することができました。長期的な修正のために、tmpwatchスクリプトを更新して '/ tmp/passenger *'パターンを除外しました(下記参照)。

#! /bin/sh 
flags=-umc 
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \ 
     -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \ 
     -X '/tmp/hsperfdata_*' -X '/tmp/passenger*' 10d /tmp 
/usr/sbin/tmpwatch "$flags" 30d /var/tmp 
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do 
    if [ -d "$d" ]; then 
     /usr/sbin/tmpwatch "$flags" -f 30d "$d" 
    fi 
done 

他に誰かがこの問題で見つけた解決策がありますか?私はsysの管理者ではありません(なぜElastic Beanstalkを使用するのかが大きな理由です)。可能であれば、EC2インスタンスをハックしない方がよいでしょう。特に私のアプリケーションが拡大してインスタンスが生成されるときです。

+3

私のコードをとり、これをhttp://pastie.org/8463846のような私のアプリケーションの '.ebextensions/server-update.config'に追加しました。新しいインスタンスも同様です。 –

0

イメージを直接s3にアップロードしたとお考えですか?インスタンスの消滅、次のリクエストが別のインスタンスによって受信されるなど、ファイルの削除が可能なElastic Beanstalkの種類のサーバーへのアップロード。私はsys-adminの男でもなく、同じ理由で弾力のある豆の茎を使っています。

基本的には、s3に直接アップロードすることで、サーバーのサービス、データベースのデータベース、ファイルストアの保存が可能になるはずです。そして、うまくいけば、あなたは

+1

これはRailsが取得する前でも発生しますアクション。明らかに乗客はRailsを呼び出す前に、このtmpディレクトリにアップロードされたファイルを保存しています。 –

+0

上記のコメントのためにDownvote。旅客はアップロードされたファイルの一時ディレクトリを割り当てます。これは質問に答えません。 – joslinm

+0

ファイルはあなたのウェブサーバー*に行く必要はありません。*ファイルを直接* s3にアップロードするフォームを作成することができます。つまり、サーバーの負荷が小さく、ファイルをロードバランサーなどに渡すことはありません。 – Will

関連する問題