我正在编写一个 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