我有一个使用Paperclip处理上传文件的Rails应用程序,我们目前由Rackspace托管。
该应用程序目前托管在一台服务器上,我正在构建一个具有负载均衡器,应用程序服务器和单独数据库服务器的可扩展性更高的解决方案。我需要做的最后一件事是上传资产的解决方案。我曾尝试使用Rackspace的CloudFiles,但似乎使用paperclip和CloudFiles的唯一方法是将它们放在公共CDN上,我无法使用,用户需要进行身份验证才能访问文件。在我转向Amazon S3之前,由于他们可以选择临时URL,是否知道如何将CloudFiles与Paperclip一起使用并要求身份验证来访问文件?
非常感谢任何帮助,提示,Google搜索,链接或解决方案。
答案 0 :(得分:1)
碰巧,云文件also supports生成临时URL,it appears that Paperclip does allow you to make use of it。只需在您的视图中使用Attachment
生成#expiring_url
而不是#url
生成网址:
= image_tag @organization.logo.expiring_url(Time.now.to_i + 100, :original).gsub(/^http:/, "https")
Paperclip将only generate http urls,但由于Rackspace的临时网址不在其校验和中使用该方案,因此您可以使用gsub
来将其转换为https网址。另外,请注意#expiring_url
的第一个参数是绝对时间戳(以秒为单位)。
Rackspace的URL过期只是最近变得模糊 - v1.18.0 - 所以如果您使用旧版本,您可能需要升级雾以利用它们:
bundle upgrade fog
Paperclip还支持generating obfuscated URLs,它看起来很有趣,但安全性较低,因为服务器不会过期。
答案 1 :(得分:0)
您可以像这样添加密钥:
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