我正在开发一个Rails网站,该网站使用Paperclip将文件上传到Amazon S3,然后通过Cloudfront提供服务。我上传工作正常,Cloudfront正在正确提供文件,但由于某种原因ModelObj.attachment.url
在我的生产服务器上无法正常工作。它在我的开发服务器(Windows 8下的WEBrick)上正常工作,但在实时站点上返回错误的URL(使用Phusion Passenger的LAMP)。它返回几乎正确的URL,而不是
http://[stuff].cloudfront.net/kidbooks/snds/5072_original.mp3?1393858446
我正在
http:///kidbooks/snds/5072_original.mp3?1393858446
配置如下:environment.rb
:
Paperclip::Attachment.default_options.merge!({
:storage => :s3,
:bucket => APP_CONFIG['s3_bucket'],
:path => "/#{APP_CONFIG['s3_path']}/:attachment/:id_:style.:extension",
:s3_credentials => {
...
}
})
在模型中:
has_attached_file :snd,
:url => ':s3_alias_url',
:s3_host_alias => APP_CONFIG['cloudfront_domain']
正在两台服务器上正确设置 APP_CONFIG
;我查过了。 (或者至少,它在实时服务器的控制台中正确设置;我想我可以直接检查更多。 没有environments/development.rb
或{{ 1}}。这里出了什么问题,我该如何解决?
(我找到this question,这与我需要的很接近,但只涉及S3。)
更新:发现一些奇怪的东西。 production.rb
返回一个哈希,其中包括:s3_host_alias => nil。也许我的模型在配置文件之前以某种方式被加载了?
答案 0 :(得分:1)
APP_CONFIG
。这意味着:s3_host_alias
被设置为零,这当然会破坏事物。我将:s3_host_alias => APP_CONFIG['cloudfront_domain']
从模型移到environment.rb
,现在它正常工作。
我不知道为什么我的模型会在我的配置文件之前加载。