Rails Paperclip返回错误的Cloudfront URL

时间:2014-03-03 19:05:04

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

我正在开发一个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。也许我的模型在配置文件之前以某种方式被加载了?

1 个答案:

答案 0 :(得分:1)

啊,啊,找到了。出于某种原因,我的模型要么在配置文件之前加载,要么加载器无法访问APP_CONFIG。这意味着:s3_host_alias被设置为零,这当然会破坏事物。我将:s3_host_alias => APP_CONFIG['cloudfront_domain']从模型移到environment.rb,现在它正常工作。

我不知道为什么我的模型会在我的配置文件之前加载。