带有S3和Cloudfront的Carrierwave不显示图像

时间:2016-08-04 01:57:37

标签: ruby heroku amazon-s3 carrierwave fog

您好我正在使用Rails和Heroku以及GoDaddy建立一个自定义域名的网站。

我正在使用Carrierwave with Fog,Amazon S3,并使用我的Heroku域名作为Origin Domain设置了一个cloudfront。目前,该网站加载图像的速度非常慢,这就是我设置云端的原因,但我的carrierwave的配置文件似乎并没有改变云端对等的网址。这是我的carrierwave配置文件。我希望用户能够通过Carrierwave上传图像,然后将这些图像传回我的云端。

CarrierWave.configure do |config|
config.fog_provider = 'fog/aws'                        # required

config.fog_credentials = {
provider:              'AWS',                        # required
aws_access_key_id:     'acesskey',                        #      required
aws_secret_access_key: 'secretkey',                        # required
region:                'us-east-1',                  # optional, defaults to 'us-east-1'
}

config.fog_directory  = 'directory'                          # required
# config.fog_public     = false    # optional, defaults to true
config.asset_host = 'randomjunk.cloudfront.net'
config.fog_public = false 
config.fog_attributes = { 'Cache-Control' => "max-age=#{365.day.to_i}" } #     optional, defaults to {}
end

只要config.fog_public为false就可以正常工作但是当我将其更改为config.fog_public = true时,网址现在是正确的但是找不到图像。这与我的配置设置有关,还是我错误地使用Heroku设置了我的cloudfront?

1 个答案:

答案 0 :(得分:0)

这取决于最初创建文件时使用的设置。如果它们是使用config.fog_public = false创建的,则它们将是私有文件,并且将使用特殊的签名URL来访问s3。我认为资产主机仅用于公共文件(因此您所看到的)。如果您使用fog_public = true上传文件,那么我不认为您会看到未找到的文件。您也可以将其设置为true并重新保存图像以更改该属性(我对此处的细节不太确定,您当然应该能够将它们更改为公开)。