我在rails 3应用程序中使用carrierwave来从我服务器的文件系统中的远程源上传和存储文件。我有一个完全标准的设置,在与模型相关联的模型上安装了一个上传器。
它在99.9%的时间内完美运行,但每600个图表左右我遇到一个问题,即应用程序持续无法提供存储的图像。如果我检查文件系统,图形图像已经上传并存储在正确的位置,具有正确的文件权限和所有内容,但rails完全没有意识到它并继续为该实例提供默认的图形图像。
换句话说,id为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
答案 0 :(得分:0)
希望我能回答......
所以你要将上传保存在公共目录之外?尝试删除&#34; ../"在图像之前,如果那不是你的意图。