[英]Rails + Paperclips + Rackspace CloudFiles with the Private CDN
我有一個使用Paperclip處理上傳文件的Rails應用程序,我們目前由Rackspace托管。
該應用程序當前托管在單個服務器上,我正在使用負載平衡器,應用程序服務器和單獨的數據庫服務器構建一個更具可擴展性的解決方案。 我需要做的最后一件事是為上載的資產提供解決方案。 我曾嘗試使用Rackspace的CloudFiles,但似乎使用回形針和CloudFiles的唯一方法是將它們放在公共CDN上(我無法使用),用戶需要通過身份驗證才能訪問文件。 在我轉向Amazon S3之前,由於它們具有臨時URL選項,是否知道如何將CloudFiles與Paperclip結合使用並需要進行身份驗證才能訪問文件?
任何幫助,提示,谷歌搜索,鏈接或解決方案將不勝感激。
碰巧的是,Cloud Files 還支持臨時URL的生成,並且似乎Paperclip確實允許您使用它 。 只需在您的視圖中使用#expiring_url
而不是#url
從Attachment
生成URL:
= image_tag @organization.logo.expiring_url(Time.now.to_i + 100, :original).gsub(/^http:/, "https")
回形針只會生成http url ,但是由於Rackspace的臨時URL在其校驗和中不使用該方案,因此您可以使用gsub
調用將其轉換為https URL。 另外,請注意, #expiring_url
的第一個參數是絕對時間戳(以秒為單位)。
Rackspace的URL過期只是在最近才使它變得模糊-v1.18.0-因此,如果您使用的是舊版本,則可能需要升級fog才能利用它們:
bundle upgrade fog
Paperclip還支持生成混淆的URL ,這看起來很有趣,但是安全性較低,因為服務器不會使其失效。
您可以像這樣添加密鑰:
class Rackspace
def self.add_temp_url_key
require 'fog'
puts "Creating Storage Service"
begin
service = Fog::Storage.new(
:provider => 'rackspace',
:rackspace_username => ENV['FOG_USERNAME'],
:rackspace_api_key => ENV['FOG_API_KEY'],
:rackspace_region => ENV['RACKSPACE_REGION'].to_sym
)
service.post_set_meta_temp_url_key(ENV['RACKSPACE_TEMP_URL_KEY'])
puts "X-Account-Meta-Temp-Url-Key successfully set to #{ENV['RACKSPACE_TEMP_URL_KEY']}"
rescue => e
puts "Unable to set X-Account-Meta-Temp-Url-Key - #{e.inspect}"
puts e.backtrace
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.