【问题标题】:Rails 3 - Disable cache for filename in file_column pluginRails 3 - 在 file_column 插件中禁用文件名缓存
【发布时间】:2026-02-09 14:00:01
【问题描述】:

这是我获取 UUID 的代码:

  def manage_id
    self.id = UUIDTools::UUID.random_create().to_s.upcase if self.id.blank?
  end

这非常适合我的对象的主键。

我的问题是我想用 UUID 命名上传的文件...并且我为不同的上传获得相同的 UUID。例如,我将拥有一个 UUID,2 分钟后,我将拥有另一个对象,我将拥有相同的 UUID!

这是给我的图片命名的类代码:

:filename => "#{UUIDTools::UUID.random_create().to_s.upcase}.jpg" }

我不明白生成 UUID 时会出现什么问题...

我在开发中没有问题!!!

编辑 1:问题不在于 UUID 本身,它与时间戳相同......(并且仅在生产中)

编辑 2:我发现了问题。设置:

config.cache_classes = true

是生产模式的问题。它肯定会将 UUID 保存在内存中的某个位置。

我认为我无法在生产模式下切换到 false(为了性能),那么停用此插件名称功能的缓存的最佳方法是什么?

编辑 3:我添加了我的模型的完整代码

class Product < ActiveRecord::Base

 file_column :image, {:magick => { :versions => { "tiny" => "70x70", "small" => "160x240", "high" => "640x960" }}, :store_dir => "public/upload/wine/image", :web_root => "upload/", :filename => "#{UUIDTools::UUID.timestamp_create().to_s.upcase}.jpg" }

end

所以,正如我所说,生成的 UUID 会在生产环境中缓存。我不知道如何强制这个模型或者插件 file_column 不被缓存?

【问题讨论】:

标签: ruby-on-rails uuid


【解决方案1】:

它对你不起作用的原因是因为你总是使用预初始化选项。 但是你可以尝试改变一些东西来改进它。例如,您可以使用 lambda 表达式来计算文件名...尝试类似下一个

file_column :image, {:magick => 
                            { :versions => 
                                { "tiny" => "70x70", "small" => "160x240", "high" => "640x960" }
                             },
                             :store_dir => "public/upload/wine/image", 
                             :web_root => "upload/", 
                             :filename => lambda { "#{UUIDTools::UUID.timestamp_create().to_s.upcase}.jpg"} }

然后改变这个

将文件名分配给临时图像路径。更新代码@class TempUploadedFile store_upload 方法行号219

@filename = options[:filename] || FileColumn::sanitize_filename(file.original_filename)

options_file_name = options[:filename].respond_to?(:call) ? options[:filename].call : options[:filename]


   @filename = options_file_name || FileColumn::sanitize_filename(file.original_filename)

【讨论】:

  • 完美运行!很好 !这是一部戏剧,因为我在前几个小时尝试了回形针,现在我有两个选择!
  • 我认为 paper_clip 比这个插件更新和强大的 gem
  • 确切。我破解了 file_column 几年。是时候改变了。我只是希望回形针不会消耗太多内存。