当使用paperclip gem将图像托管到s3时,Fog目录会使用amazon url附加本地系统路径

时间:2014-04-16 06:47:50

标签: ruby-on-rails ruby amazon-s3 paperclip fog

我正在尝试在带有雾宝石的aws-s3上托管我的网站,其中有回形针附件图像。但我的雾目录采用了错误的路径,但它附加了我的本地文件系统路径。

这是我的代码

class RealEstate < ActiveRecord::Base
  has_attached_file :image,
                    :storage => :fog,
                    :fog_credentials => "#{Rails.root}/config/s3.yml",
                    :fog_directory => "#{Rails.root}/config/fog.yml"
end

如果我在此定义存储桶名称,那么它会起作用但是它将无法使用不同的存储桶用于不同的环境

:fog_directory => "development_bucket_name" #works fine but cant use different bucket for different env

这是我的fog.yml

development:
  fog_directory: development_bucket
staging:
  fog_directory: testing_bucket
production:
  fog_directory: production_bucket

它创建的路径是:

https://s3.amazonaws.com//home/Desktop//config/fog.yml/real_estate/image/000/000/185/original/4bec7.png?1396429186

1 个答案:

答案 0 :(得分:1)

Paperclip不知道您传递的字符串是配置文件的路径 - 它期望实际的存储桶名称。

您需要解析yaml文件并从中提取存储桶名称。例如

directories = YAML.load(File.read(Rails.root.join('config', 'fog.yml')))
has_attached_file :image,
                  :storage => :fog,
                  :fog_credentials => "#{Rails.root}/config/s3.yml",
                  :fog_directory => directories[Rails.env]['fog_directory']