0

以下に説明する、問題の原因についてフィードバックをいただければ幸いです。

ユーザーが画像をアップロードできるアプリケーションがあります。開発ではすべてが正常に機能し、本番環境では正常に機能していました。

最近、私の新しい画像はすべて壊れています。新しい画像をアップロードできますが、数時間後にもう一度確認すると、画像が再び壊れています。これは約 1 週間前に発生し始めましたが、それ以前に制作していた画像はまだ問題ありません。

Bootstrap と SimpleForm で Rails を使用し、画像には Paperclip を使用しています。私は開発と運用の両方で Postgres を使用しており、Heroku にデプロイしています。

私が持っている唯一のヒントは、ユーザーがプロフィール写真をアップロードしていないときにデフォルトとして使用する「blank_profile_pic.png」画像にあります。

User.all.each do |u|
  if u.profile_pic.file?
    image_tag(user.profile_pic)
  else
    image_tag("blank_profile_pic.png")
  end
end

profile_pic がアップロードされていないユーザーの場合、そのプロフィールが先週作成された場合は壊れた画像が表示されますが、1 週間前に問題が表面化する前にアカウントを作成したユーザーには、予想される「blank_profile_pic.png」が残ります。同じコード ブロックが、最近のユーザーと古いユーザーの間で異なる結果を返すにはどうすればよいでしょうか?

どこから始めればよいか本当にわからないので、考えられる原因と、ここに表示できる他のファイルがあるかどうかについてのフィードバックをいただければ幸いです。

どうもありがとうございました!

4

2 に答える 2

1

Heroku は読み取り専用システムです。そのため、画像を S3 または提供されている他のクラウドにアップロードする必要があります。

画像が Heroku の /tmp にアップロードされた後、何らかの理由でクリアされたためにエラーが発生した可能性があります。

ドキュメントは次のとおりです: https://devcenter.heroku.com/articles/read-only-filesystem

S3 で Paperclip を構成する: https://github.com/thoughtbot/paperclip#storage

于 2012-09-28T03:28:32.370 に答える
0

imagemagick gem がインストールされているかどうかはわかりませんが、image_magic で同じ問題が発生し、本番環境ではペーパークリップ機能が壊れていましたが、開発環境ではそうではありませんでした (奇妙なことに、私は知っています)。それでも、gemfile と Gemfile.lock から imagemagick をローカルで削除し (bundle install などを実行して)、heroku で本番環境にデプロイした後でも、エラーは本番環境で持続しました! (奇妙な、私は知っている)。

最終的にトリックを実行したのは次のとおりです。

$ heroku repo:purge_cache -a myAppName

(から取得: https://github.com/heroku/heroku-repo#purge_cache )

アプリをデプロイすると、デプロイを高速化するために、Heroku はアセットやインストールされた gem などをキャッシュします。これは素晴らしい機能ですが、副作用が発生する場合もあります。この場合、imagemagick gem に関する何かがプロダクションのキャッシュに「スタック」したようです。これが、パージによって問題が解決した理由です (パージ後、あなたのアプリは、次回の展開時にゼロから再構築されます)

于 2014-11-26T18:00:37.477 に答える