Rails + Paperclips + Rackspace CloudFiles与私有CDN

时间:2014-04-03 18:56:26

标签: ruby-on-rails paperclip rackspace-cloud fog cloudfiles

我有一个使用Paperclip处理上传文件的Rails应用程序,我们目前由Rackspace托管。

该应用程序目前托管在一台服务器上,我正在构建一个具有负载均衡器,应用程序服务器和单独数据库服务器的可扩展性更高的解决方案。我需要做的最后一件事是上传资产的解决方案。我曾尝试使用Rackspace的CloudFiles,但似乎使用paperclip和CloudFiles的唯一方法是将它们放在公共CDN上,我无法使用,用户需要进行身份验证才能访问文件。在我转向Amazon S3之前,由于他们可以选择临时URL,是否知道如何将CloudFiles与Paperclip一起使用并要求身份验证来访问文件?

非常感谢任何帮助,提示,Google搜索,链接或解决方案。

2 个答案:

答案 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