ruby-on-rails - 将服务器上的回形针路径文件名更新为 s3

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

我有一个回形针实例,我正在将我的文件迁移到不同的区域。最初文件存储在我的服务器上,只是根据创建的记录的 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 字段,以便新文件的路径正确并且我能够适本地下载它们。有没有一种方法可以直接根据我的 secret 和 hash_data 调用回形针哈希函数,这样我就可以更新那些 file_name 字段并能够立即提取这些记录?自从我的原始服务器移动后上传的所有内容似乎都能正常工作。

最佳答案

假设您有一个模型 User,其附件名为 profile_pic

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

现在键入 u.profile_pic.url 获取 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

应该给你你想要的:)

关于ruby-on-rails - 将服务器上的回形针路径文件名更新为 s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347373/

相关文章:

javascript - 为什么 Ruby on Rails 默认使用 Prototype.js?

mysql - 删除存储在 MySQL 中的文本的额外附加字符

ruby-on-rails - 在 Rails 中通过单击让 Flash 消息消失

ruby-on-rails-4 - Rspec 测试表单文件上传

ruby-on-rails - 如何使用 Rails 3 Rspec 和 Capybara 访问 Selenium 2 的默认 webdriver?

ruby-on-rails - 有没有办法修改 Rails 模板的缩进样式?

ruby - parens 出现奇怪的语法错误

ruby-on-rails - 弃用警告 : Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s)

ruby-on-rails - Ruby on Rails 重定向如何在路由文件中传递参数

ruby-on-rails - 检查关联是否存在而不引起数据库命中