前説
公開の手直しをしていると、paperclip関連でとある事件が起こりました。
某日、事件は起こった・・・
paperclipで保存した画像が表示されない問題。
前提
Imagemagick
rails(4.2.0)
paperclip(6.0.0)->(4.8.0)でも試した
User画像をpaperclipで画像アップロードできる
今まではできてた?
そう。ある日突然。
「事件発生後」に更新した画像はもう表示できない。
「事件発生前」の画像は表示されてる。
Viewでfile_fieldになってる?
出力
<%= image_tag @user.avatar.url %>
入力
<%= f.label :image %><br>
<%= f.file_field :avatar %>
なってる
データベースに格納されてないんじゃないの?
SQLで検索
select avatar_updated_at, avatar_file_name ,nickname from users;
一番下、画像のユーザー「yyyyyy」には何らかの画像が割り当てられています。
modelとcontrollerはどうなってる?
model/user.rb
has_attached_file :avatar,
styles: { medium: "300x300#", thumb: "100x100#" },
default_url: '/default.png'
validates_attachment_content_type :avatar,
content_type: ["image/jpg","image/jpeg","image/png"]
controller/application_controller.rb
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:account_update) do |u|
u.permit(:email, :password,:password_confirmation, :nickname, :avatar,:field, :birth,:current_password,:tag_list, {:tag_list => []})
end
devise_parameter_sanitizer.permit(:sign_up) do |u|
u.permit(:email, :password,:password_confirmation, :nickname, :avatar, :birth, :tag_list, {:tag_list => []})
end
end
もし、user画像が保存されていない場合、default.pngが表示される仕組みになっています。
こんな感じ
ブラウザでnotfound出てるよな?
格納先に行ってみよう
/public/system/users/avatar/000/000/id名
「yyyyyy」のidは48。
確かに格納されていない・・・
やったこと
データベースの画像更新履歴を見てみた。
「5/8 ユーザー名: 一護」に投稿した画像は難なく表示できていた。これが最新の更新成功履歴である。
(5/15はいずれも失敗)
ということは5/8以降に変更した何かが問題を起こしている・・・?
Gitの更新履歴を見る。
コミットしててよかった。Gitの重要性を再確認。
う〜ん、この。
よければアドバイスなどが欲しいです・・・
個人的な推測
paperclipの保存先が悪い???