Ruby on rails 使用回形针、雾和Ceph

Ruby on rails 使用回形针、雾和Ceph,ruby-on-rails,ruby-on-rails-3,paperclip,fog,ceph,Ruby On Rails,Ruby On Rails 3,Paperclip,Fog,Ceph,我正在编写一个Rails 3应用程序,它使用回形针将视频文件附件转换成一系列其他格式,然后存储生成的文件。对于本地存储来说,这一切都很好,但我正在尝试使用曲别针的Fog支持将文件存储在我们自己的Ceph集群上的一个桶中。但是,我似乎找不到正确的配置选项,无法使Fog与我的Ceph服务器通信 下面是我的Rails类的一个片段: has_attached_file :videofile, :storage => :fog, :fog_credentials => { :aws_a

我正在编写一个Rails 3应用程序,它使用回形针将视频文件附件转换成一系列其他格式,然后存储生成的文件。对于本地存储来说,这一切都很好,但我正在尝试使用曲别针的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',
使用此设置写入失败,因为曲别针试图保存到Amazon S3,而不是我提供的主机。我有一个非轨道/非回形针玩具脚本工作得很好:

conn = Fog::Storage.new({
   :aws_access_key_id => 'xxx',
   :aws_secret_access_key => 'xxx',
   :host => 'my-hostname',
   :path_style => true,
   :provider => "AWS",
})
这将正确连接到我的本地Ceph服务器。所以我怀疑我在回形针中没有正确配置某些东西-但是什么呢

下面是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

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

  • 为Ceph前端正确设置通配符DNS
  • Ceph被配置为识别这样的信息
  • :fog_凭据中传入
    :host
    ,这将是Ceph前端的FQDN
  • :fog_host,它显然需要成为您的bucket的URL,例如
    https://bucket.ceph-server.foobar.com.

  • 回形针可以从盒子里取出。我不认为在任何地方都可以使用
    :host
    ,但它是有效的

    阅读fog.rb,看起来有一些硬编码的假设,即:fog数据存储将只使用AWS S3——至少,我认为这就是正在发生的事情。因此,我正在评估修补fog.rb或为回形针编写一个新的存储模块(或使用替代品,如Dragonfly)是否更明智,这两种方法都可能奏效。您可能只需要创建现有子类的一个子类,该子类返回此方法所需的内容(但也可以委托给父类)。这应该是相对干净的(希望不会太容易破损)。事实证明,来自fog.rb的hunk与amazon的特性没有什么关系。我发现我可以传递:host-inside:fog_凭据,并且可以很好地传递。然而,我仍在努力追踪一个零级错误。很高兴听到取得了一些进展。如果你在这里(或在一个问题中)发布nil类错误,我很乐意尝试帮助你。谢谢