1

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

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

任何帮助、提示、谷歌搜索、链接或解决方案将不胜感激。

4

2 回答 2

1

碰巧的是,Cloud Files还支持生成临时 URL,而且看来 Paperclip 确实允许您使用它。只需从您的Attachmentwith#expiring_url而不是#url在您的视图中生成 URL:

= image_tag @organization.logo.expiring_url(Time.now.to_i + 100, :original).gsub(/^http:/, "https")

Paperclip只会生成 http url,但由于 Rackspace 的临时 URL 在其校验和中不使用该方案,您可以使用gsub调用将其转换为 https URL。另外,请注意第一个参数#expiring_url绝对时间戳(以秒为单位)。

Rackspace 的过期 URL 只是在最近才让它变得模糊 - v1.18.0 - 所以如果你使用的是旧版本,你可能需要升级模糊来利用它们:

bundle upgrade fog

Paperclip 还支持生成混淆 URL,这看起来很有趣,但安全性较低,因为服务器不会使其过期。

于 2014-04-03T20:56:39.760 回答
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
于 2014-08-11T05:32:57.803 回答