2009-09-07 43 views
1

我看到有在attachment_fu一個:user_ssl選項,檢查amazon_s3.yml文件,以便通過HTTPS文件服務解決方案://基於request.ssl動態地通過HTTPS服務文件?與Attachment_fu

在s3_backend.rb你有這樣的方法:

def self.protocol 
     @protocol ||= s3_config[:use_ssl] ? 'https://' : 'http://' 
    end 

但是這樣就可以使用SSL爲所有s3附件提供服務。我想使其動態取決於當前請求是否使用https://例如:

if request.ssl? 
    @protocol = "https://" 
    else 
    @protocol = "http://" 
    end 

如何使其以這種方式工作?我試着修改方法,然後得到NameError:未定義的局部變量或方法'請求」的Technoweenie :: AttachmentFu ::後端:: S3Backend:模塊錯誤

回答

0

的問題是,該方法你修改(Technoweenie::AttachmentFu::Backends::AWS::S3.protocol)是靜態的,無法訪問有問題的文件或請求。你想要修改的是Technoweenie::AttachmentFu::Backends::AWS::S3#s3_url(thumbnail)。你必須添加一個選項參數,這樣你的控制器就可以傳遞它是否需要SSL,因爲這個模型級別的包不理解控制器級別的問題,比如「當前請求」(也不應該)。

但真正的答案是「你可能不想這樣做。」如果客戶說「我們有一個免費增值模式,其中只有我們的付費客戶獲得他們的照片的SSL傳輸」,您應該推回:「它實際上是更難削弱SSL文件傳輸,它可能只是引入錯誤我們來考慮另一個免費增值選項。「如果客戶不真正關心,那麼只需打開所有上傳的SSL即可。

+1

我仍然會碰到的問題與不想要顯示圖片的瀏覽器在頁面上,如果它們是通過SSL提供的,而頁面本身不是這樣,那麼將頁面上的所有引用保留爲「http」或全部修改爲「https」即可。 – 2009-09-07 16:22:47

+0

Mike, 這幾乎是我試圖解決的問題。具體關於IE 7/8安全警告錯誤... – 2009-09-07 17:09:40

+0

蓋厄斯, 謝謝,我會給它一個鏡頭。 – 2009-09-07 17:10:16

0

這是一個需要正確解決的重要問題,或者其含義相當惡劣(特別是如果您不在IE中測試,錯誤和警告可能會被您忽略)。我的解決辦法是把在ApplicationController

around_filter :set_attachment_fu_protocol 

def set_attachment_fu_protocol 
    protocol = Technoweenie::AttachmentFu::Backends::S3Backend.instance_variable_get(:@protocol) 
    Technoweenie::AttachmentFu::Backends::S3Backend.instance_variable_set(:@protocol, request.protocol) 
    yield 
ensure 
    Technoweenie::AttachmentFu::Backends::S3Backend.instance_variable_set(:@protocol, protocol) 
end 

該解決方案如下被設計成具有以下特性:

  • 不需要打補丁attachment_fu
  • 每個請求
  • 設置S3後端協議
  • 重置協議即使發生異常
  • 保留默認設置:u se_ssl設置,如果你從控制檯運行
  • 不要求around_filter是通用的,因爲它總是在每個請求之後其重置爲初始狀態