appとdb(mongodb)サーバの両方が昨晩再起動されました。ファイルがまだ存在していても、すべてのキャリバーウェーブ搭載アップローダーがアバターのデフォルト画像を返しています。再起動後のキャリア波リセット
私はRackspace CDNでフォグストレージを使用しています。各ユーザーモデルには、avatar_filename
のフィールドが含まれています。私はuser.avatar.recreate_versions!
を実行しようとしましたが、nilのためにエラーが出ました。
イメージを復元する方法はありますか(まだ存在しています)、これが再び起こらないようにしますか?私は周りを検索したが、これは一般的なプロムであるように見えない。私のユーザモデルで
:
# Avatar
mount_uploader :avatar, AvatarUploader
AvatarUploader:イメージがありますが、あなたがこれを避けるためにuser.remote_avatar_url = "the url for this avatar"
でリモートファイルとしてそれらを再度アップロードすることができることを考えると
class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def default_url
"/assets/users/profile-default_#{version_name}.png"
end
# Large
version :large do
resize_to_limit(600, 600)
end
# Small
version :small do
process :crop
resize_to_fill(140, 140)
end
# Thumbnail
version :thumb, :from_version => :small do
resize_to_fill(35, 35)
end
def extension_white_list
%w(jpg jpeg png)
end
def filename
if @filename_created
@filename_created
elsif original_filename
@name ||= Digest::MD5.hexdigest(File.dirname(current_path))
@filename_created = "a_#{timestamp}_#{@name}.#{file.extension}"
@filename_created
end
end
def timestamp
var = :"@#{mounted_as}_timestamp"
model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
end
def crop
if model.crop_x.present?
resize_to_limit(600, 600)
manipulate! do |img|
x = model.crop_x.to_i
y = model.crop_y.to_i
w = model.crop_w.to_i
h = model.crop_h.to_i
img.crop!(x, y, w, h)
end
end
end
end
まず物事を最初に。モデルにavatar_filenameフィールドがあります:avatarフィールドにmount_uploaderを呼び出しているのはなぜですか? 第2に、uploaderでファイル名を2回定義しています - default_urlとfilenameメソッドで。それがなぜ必要なのか理解できず、それも問題の一部になる可能性があります。 – Almaron
@Almaron '' avatar_filename''はアップローダをマウントした結果、carrierwave/carrierwave_mongoidによって作成されました。デフォルトのURLはまだアップロードしていないユーザーに空白のアバターを提供することです。 –