【问题标题】:Updating Paperclip path file names from on server to s3将服务器上的回形针路径文件名更新到 s3
【发布时间】:2015-07-10 18:00:33
【问题描述】:

我有一个回形针实例,我正在将我的文件迁移到不同的区域。最初这些文件存储在我的服务器上,只是根据创建的记录的 id 和原始 id 给出了一个文件名。现在我将它们移动到 s3 并希望更新文件名以正常工作。我像这样设置回形针配置:

:path => ":class/:attachment/:hash-:style.:extension",
    :url => ":s3_domain_url",
    :hash_secret => SECRET,
    :hash_data => ":class/:attachment/:id/:updated_at"

我为我的文件更新了原始记录文件名以使其唯一,并将它们移至我的 s3 实例。不幸的是,现在我无法从 s3 中提取文件,我认为这是因为回形针使用了错误的文件名路径。一个基于现在使用我的配置文件设置的路径默认值的路径。我希望能够更新我的文件 file_name 字段,以便新文件的路径正确,并且我能够适当地下载它们。有没有办法根据我的秘密和 hash_data 直接调用回形针散列函数,这样我就可以更新那些 file_name 字段并能够现在提取这些记录?从我的原始服务器迁移后上传的所有内容似乎都可以正常工作。

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-4 amazon-s3 paperclip


【解决方案1】:

假设你有一个模型 User 带有一个名为 profile_pic 的附件;

进入 Rails 控制台,例如。 rails c 然后为您有附件的模型获取一个对象,例如。 u = User.find(100)

现在输入u.profile_pic.url 获取网址或输入u.profile_pic_file_name 获取文件名。

要查看其他选项(例如您的旧选项)的效果,您可以这样做;

p = u.profile_pic # gets the paperclip attachment for profile_pic
puts p.url # gets the current url
p.options.merge!(url: '/blah/:class/:attachment/:id_partition/:style/:filename')
puts p.url # now shows url with the new options

同样p.path 将显示本地文件路径以及您选择的任何选项。

长话短说,类似;

User.where('created_at < some_date').map do |x| 
  "#{x.id} #{x.profile_pic_file_name} #{x.profile_pic.path}" 
end

应该给你你想要的:)

【讨论】:

  • 我不确定我得到了这个问题 - 你可以在 s3 上重命名文件,是的。
  • ...怎么样? aws-sdk 在您在 s3 存储桶中操作的对象上只有只读项。我发布了另一个问题 (stackoverflow.com/questions/31550527/…) 以提供更多信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 2012-07-07
  • 2016-08-21
  • 2012-07-08
  • 2012-04-15
  • 1970-01-01
相关资源
最近更新 更多