Я использую carrierwave в приложении rails 3 для загрузки и сохранения файла из удаленного источника в файловой системе моего сервера. У меня есть полностью стандартная настройка с загрузчиком, смонтированным на модели, с которой связан образ.
Он отлично работает в 99,9% случаев, но каждый 600-й график или около того я сталкиваюсь с проблемой, когда приложение постоянно не может обслуживать сохраненное изображение. Если я проверю файловую систему, изображение графика будет загружено и сохранено в правильном месте, с правильными правами доступа к файлам и тому подобному, но rails об этом не знает и продолжает обслуживать изображение графика по умолчанию для этого экземпляра.
Другими словами, граф с идентификатором 123 хранит свое изображение в /uploads/graphs/123/graph.png ... правильное изображение есть, но что касается рельсов, у него нет сохраненного изображения. Все остальные графические изображения по-прежнему работают нормально, но я не могу заставить рельсы узнать об изображении, сохраненном для 123. Удаление и восстановление изображения не работает. Удаление изображения и повторная загрузка вручную не работает. Я полностью потерян. Экземпляр графа действителен, в журналах нет ошибок при сохранении.
например, в консоли:
g = Goal.find_by_id("123")
g.remote_graph_url = "http://image.source/url.png"
> "http://image.source/url.png"
g.save
> true
g.graph?
> false
g.graph_url >> /default/image.png
вот соответствующий код:
class GraphUploader < CarrierWave::Uploader::Base
def store_dir
"../uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
def default_url
"/images/" + [version_name, "default_large_graph.png"].compact.join('_')
end
def extension_white_list
%w(jpg jpeg gif png)
end
def filename
"graph.png" if original_filename
end
end
class Graph
mount_uploader :graph, GraphUploader
end