1

我正在编写一个 Rails 3 应用程序,它使用 Paperclip 将视频文件附件转码为一堆其他格式,然后存储生成的文件。这一切都适用于本地存储,但我正在尝试使用 Paperclip 的 Fog 支持将文件存储在我们自己的 Ceph 集群上的存储桶中。但是,我似乎找不到正确的配置选项来让 Fog 与我的 Ceph 服务器通信。

这是我的 Rails 课程的一个片段:

has_attached_file :videofile,
  :storage => :fog,
  :fog_credentials => { :aws_access_key_id => 'xxx', :aws_secret_access_key => 'xxx', :provider => 'AWS'},
  :fog_public => true,
  :url => ":id/:filename",
  :fog_directory => 'replay',
  :fog_host => 'my-hostname',

使用此设置写入失败,因为 Paperclip 尝试保存到 Amazon S3 而不是我提供的主机。我有一个非 Rails / 非 Paperclip 玩具脚本工作得很好:

conn = Fog::Storage.new({
   :aws_access_key_id => 'xxx',
   :aws_secret_access_key => 'xxx',
   :host => 'my-hostname',
   :path_style => true,
   :provider => "AWS",
})

这会正确连接到我的本地 Ceph 服务器。所以我怀疑有些东西我没有在 Paperclip 中正确配置——但是什么?

这是来自fog.rb的相关大块,我认为它导致连接仅转到AWS:

def host_name_for_directory
        if @options[:fog_directory].to_s =~ Fog::AWS_BUCKET_SUBDOMAIN_RESTRICTON_REGEX
          "#{@options[:fog_directory]}.s3.amazonaws.com"
        else
          "s3.amazonaws.com/#{@options[:fog_directory]}"
        end
      end
4

1 回答 1

2

该错误只是来自配置不正确的 Ceph 集群。对于找到此线程的任何人,只要您:

  1. 为 Ceph 前端正确设置通配符 DNS;
  2. Ceph 配置为这样识别
  3. 传入:host:fog_credentials这将是 Ceph 前端的 FQDN
  4. :fog_host,这显然需要是您的存储桶的 URL,例如https://bucket.ceph-server.foobar.com.

回形针开箱即用。我认为它没有记录在您可以使用的任何地方,:host但它可以工作。

于 2014-06-30T19:35:28.173 回答