2016-11-29 69 views
1

我正在嘗試使用carrierwave在我的數據庫中上傳圖片的完整url,而不僅僅是標識符。保存圖像之前,我有可用的圖像URL,但只保存標識符顯示在數據庫中。我在Carrierwave.rb配置中設置了主機和端點,以及asset_host。見下:Carrierwave + fog + S3 + Rails無法在數據庫中保存完整的網址

CarrierWave.configure do |config| 
    config.fog_provider = 'fog/aws'      # required 
    config.fog_credentials = { 
    provider:    'AWS',      # required 
    aws_access_key_id:  'xxx',      # required 
    aws_secret_access_key: 'yyy',      # required 
    region:    'eu-west-1',     # optional, defaults to 'us-east-1' 
    host:     's3.example.com',    # optional, defaults to nil 
    endpoint:    'https://s3.example.com:8080' # optional, defaults to nil 
    } 
    config.fog_directory = 'name_of_directory'       # required 
    config.fog_public  = true          # optional, defaults to true 
config.asset_host = "https://s3.example.com:8080/name_of_directory" 
end 

在這種情況下,asset_host似乎沒有太大的作用。是否有另一種方式來確保完整的網址被保存?

謝謝!

回答

0

存儲所有完整的URL可能會導致大量重複(因爲主機對所有URL都是相同的)。因此,這裏的方法是隻存儲不同的部分,並從已知的主機和存儲的標識符構建URL。所以當你加載文件時,你應該能夠使用carrierwave接口輕鬆找到url(並且它應該遵守asset_host,如果提供的話)。

是否有一個特殊原因需要它來存儲完整的URL?

+0

非常感謝您的信息。雖然我理解功能背後的原因,但從數據庫的角度來看,我不希望依賴Carrierwave進行所有交互,並保持將來使用其他解決方案的靈活性和自由度,並且可以直接與數據庫進行交互,或者根據需要導入/導出數據。你有解決這個問題的辦法嗎?預先感謝您 – user4889724

+0

不夠公平。我對這裏的細節不太熟悉(比起載波更廣泛的問題,更熟悉霧本身)。我想你也許可以這樣做: ''' before_save做 self.full_url = self.url 結束 ''' 並確保full_url是一個定義的列(甚至是創建網址爲一列會是足夠的,我也不使用鐵軌)。無論如何,我認爲從保存時間的方法中爲列設置一個值可能會讓你得到你想要的。 – geemus

相關問題