2013-11-22 17 views
20

對不起,如果這是一個長時間的簡單問題,但我想清楚我的想法。Rails 4靜態資產在public /或app/assets/

我已經在幾個項目中使用Rails 4,並且我一直在使用image_tag('/assets/image.png')來解決資產路徑助手在Rails 4中的工作方式。直到今天,當我決定了解更多關於這些更改並發現this first change note in sprockets-rails。我還注意到,Rails助手中的/actionview/lib/action_view/helpers/asset_url_helper.rb#L170中的ASSET_PUBLIC_DIRECTORIES僅指向公用文件夾。對我來說很明顯,如果你正在訪問靜態文件,Rails希望你使用公用文件夾。

所以,現在,我已經想通了這一點,我只是不明白爲什麼邊緣軌道文檔清楚地說明這一點:

在Rails之前的版本,所有資產都位於子目錄公衆如圖像,JavaScript和樣式表。通過資產管道,這些資產的首選位置現在是應用/資產目錄。

image_path在實踐中生成一個uri到public/images文件夾,這完全相反。

總而言之,我確實需要使用所有可用的幫助程序和摘要構建器,因爲我最終將我的資產部署到S3,其中包含asset_sync

所以我的問題只是;是否有正確放置圖像/非編譯資產和使用asset_path助手?所有文檔和其他堆棧溢出對話都是關於使用應用程序/資產文件夾的人,但是sprocket-rails希望我們使用公開的非消化資產。網絡上的文檔和信息是否需要更新,或者其他人是否只是將所有資產路徑預先設置爲/ assets /?

更新:我認爲我確實有一個問題,我沒有重新啓動我的開發服務器,app/assets/images中的圖像沒有顯示出來,所以它會回退給公衆。另外請注意,我在我的回形針default_url中使用了資產助手(作爲在我發現的幾個堆棧溢出答案中指向資產的方式,但是在回形針中使用具有內插選項的資產路徑助手也會回退到公共狀態,因爲uninterpolated資產名稱將不會被發現的明顯的現有文件。

+0

對於任何通過谷歌搜索發現的人來說,資產在Rails指南中描述,網址爲http://guides.rubyonrails.org/asset_pipeline.html –

回答

30

當您使用rake assets:precompile,Rails的移動全部資產從app/assets文件夾,以public/assets,這是作爲一個正常的瀏覽器無法訪問您的app目錄,但有權訪問public

因此,要回答你的問題,這裏是我的想法。適用於您的網站佈局,例如徽標或背景,那麼您應該將它們存儲在app/assets/images目錄中,但是,如果圖像是用戶生成的,例如配置文件圖像,則應將這些圖像直接存儲在諸如public/images之類的內容中。理想情況下,您可以將這些存儲在S3或CDN中,但您已經這麼做了。

作爲獎勵,Carrierwave,Rails的圖片上傳寶石,使用public/images型路徑作爲默認存儲它的圖像,你可以在自己的配置文件中看到:

# Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

希望這有助於!