Carrierwave雾本地存储完整附件路径

时间:2016-06-26 20:04:55

标签: ruby-on-rails carrierwave local fog

我正在构建一个带有载波和雾的rails应用程序,用于附件存储。在我的测试环境中,我使用雾本地存储。

我正在寻找一种方法来获得这种配置的完整附件路径。

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider:               'Local',
    local_root:             '/Users/me/fog',
    endpoint:               '/Users/me/fog',
  }

  config.fog_directory  = 'test.myapp.com
  config.fog_public     = false
  config.fog_attributes = { 'Cache-Control' => 'max-age=315576000' }
end

当我使用任何其他存储选项(例如AWS S3)时,我可以通过执行my_object.my_attachment_urlmy_object.my_attachment.path来获取附件的完整网址。

但是,在使用Local存储时,我只获得了my_object/my_attachment/1/test.jpg等配置选项的相对路径。

有没有办法通过carrierwave或fog来获取这个本地文件的完整路径?

对于我的示例,我要查找的输出是:/Users/me/fog/test.myapp.com/my_object/my_attachment/1/test.jpg

1 个答案:

答案 0 :(得分:0)

对我来说,答案是修改为carrierwave uploader类。

我有

def store_dir
  "#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

适用于AWS S3,因为在此字符串之前插入了所有S3特定信息。但是,为了让它与雾Local一起使用,我添加了:

if Rails.env.test?
  def base_path
    "#{File.expand_path(CONFIG.fog_local_root)}/#{CONFIG.fog_directory}/"
  end
else
  def base_path
    ''
  end
end