2014-03-03 64 views
1

我正在使用Paperclip將文件上傳到Amazon S3並通過Cloudfront提供服務的Rails網站上工作。我的上傳工作正常,Cloudfront正確地提供了這些文件,但由於某種原因,ModelObj.attachment.url在我的生產服務器上無法正常工作。它在我的開發服務器(Windows 8下的WEBrick)上正常工作,但在現場(LAMP with Phusion Passenger)上返回錯誤的URL。它返回幾乎正確的URL,而是Rails Paperclip返回錯誤的Cloudfront 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.rbproduction.rb有什麼關係。修復

(我發現this question,這是接近我所需要的,但只涉及S3)

更新:發現一些奇怪Model.snd.options返回,其中包括,除其他事項外散,。: s3_host_alias => nil。也許我的模型在配置文件之前被加載了嗎?

+0

生產服務器中'APP_CONFIG ['cloudfront_domain']'的值是什麼? – Agis

+0

@ Agis:'1.9.3-p429:001> APP_CONFIG ['cloudfront_domain']' '=>「[correct] .cloudfront.net」'。我猜可能它在服務器和控制檯之間有某種不同,但我不知道一個簡單的方法來測試(在某處添加虛擬頁面的情況)。 – user1618143

+0

APP_CONFIG ['s3_path']'的值是什麼? – Agis

回答

1

啊哈,找到它了。出於某種原因,我的模型要麼在我的配置文件之前加載,要麼加載程序無法訪問APP_CONFIG。這意味着:s3_host_alias被設置爲零,這當然打破了事情。我將:s3_host_alias => APP_CONFIG['cloudfront_domain']從模型移動到environment.rb,現在它工作正常。

但我不知道爲什麼我的模型會在我的配置文件之前加載。