2015-07-10 79 views
3

我有一個回形針實例,將我的文件遷移到不同的區域。最初這些文件存儲在我的服務器上,並根據創建的記錄的ID和原始ID給出一個文件名。現在我將它們移動到s3並且想要更新文件名以適當地工作。設置我的回形針的配置,像這樣:將Paperclip路徑文件名從服務器更新到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字段並能夠現在拉這些記錄?自從原始服務器遷移後上傳的所有內容似乎都能正常工作。

+0

您是否在尋找這個https://github.com/thoughtbot/paperclip/wiki/Hashing? – Pavan

回答

2

假設你有一個模型用戶與附件名爲profile_pic;

進入軌道控制檯,例如。 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 

應該給你你想要的東西:)

+0

有沒有辦法更新s3上的文件名? – noname

+0

我不確定是否有問題 - 您可以在s3上重命名文件,是的。 – Anko

+0

...怎麼樣? aws-sdk只有在s3桶內操作的對象上的只讀項目。我發佈了另一個問題(http://stackoverflow.com/questions/31550527/rename-object-in-s3-using-ruby)以及更多信息 – noname

相關問題