2011-10-07 98 views
3

當前正在開發一個項目,我們需要在各種靜態html頁面中爲這些項目添加靜態資源,這些資源可以隨時爲您「工作」。我們不能讓任何人直接編輯html來爲資源放置路徑。我們需要它來簡單地工作,以便將HTML +資源文件夾直接放置到/ public中,並且在生成內容時提供內容。Rails中的靜態頁面和資產3.1.1

當測試在生產這種行爲,這是一個與錯誤,如不走:

ActionController::RoutingError (No route matches [GET] "/some_folder/some-image.png"): 

我認爲這是什麼,我從3.1.X的資產管道讀出結果。

你如何改變路線,這些路線將直接送達?還是有一種保持這種精確行爲的首選方法? (這最終將部署在Heroku上。)

添加一些細節如當前的言論還沒有把我的問題在邊緣的解決方案方面:

在目前的情況下我跑它直接在WEBrick rails s -e production上進行測試。在開發模式下,這確實工作正常;唯一的例外是production

我也運行在運行服務器在此之前: bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile --trace

當我居然試圖在生產中加載網頁,我看到下面的輸出:

cache: [GET /] miss 
cache: [GET /test_files/index.css] miss 
cache: [GET /test_files/index.js] miss 
cache: [GET /test_files/logo.png] miss 
cache: [GET /test_files/background.png] miss 
cache: [GET /test_files/horizontal.png] miss 
cache: [GET /favicon.ico] miss 
+1

顯然,在進一步審查production.rb時,我看到:「config.serve_static_assets = true」,默認設置爲false時會引起webrick中遇到的問題。因此,將其設置爲true時,它會正確提供文件。 – ylluminate

回答

3

經過production.rb的進一步審查,我看到:「config.serve_static_assets = true」,默認情況下設置爲false會喚起webrick中遇到的問題。因此,將其設置爲true時,它會正確提供文件。

從一些額外的閱讀看來,也許Heroku也需要這個設置爲false,這也是我們正在部署的環境。

感謝您的意見,但這似乎是現在採取的方法,如果這不是正確的答案,或者如果有更好的方法,我當然會感激任何進一步的輸入。

2

鐵軌3.1。 1預編譯任務會創建非消解和消解文件名,因此您可以在靜態文件中引用這些文件(同時仍在動態文件中具有摘要版本)。

唯一的問題是,如果您在資產目錄上使用遠期標題;沒有消息的文件的更改將不會被仍具有副本的遠程客戶端選取,並且認爲緩存仍然有效。

您可能需要查看一種方法,在部署過程中用正確的名稱替換未消解的文件名。

如果你沒有在目錄中使用遠遠的標題,那麼它沒關係 - 你可以使用任何名稱。

+0

在上面增加了一些額外的細節。 – ylluminate

1

如果您有/public/some_folder/some-image.png物理存在(無論您是手動複製它還是通過資產預編譯生成),它必須工作。服務器(例如Apache)首先會檢查請求的路徑是否存在,如果它不會調用Ruby on Rails。

至於消化的文件名是關心有是關閉該功能的選項,但我不會建議,對於已經有人提到人在這裏的原因。

您還可以將引用資產的文件放在app/assets文件夾中,並在最後添加.erb擴展名。然後你可以使用<%= asset_path ...%>該文件裏面,所以沒有人工編輯將是必要的。這甚至會工作,如果你已經對文件中的一些其他預處理,例如青菜 - style.css.scss.erb會工作。首先評估erb代碼(爲資產輸入正確的文件名),然後運行sass編譯器。

+0

在上面增加了一些額外的細節。 – ylluminate

2

對我來說,@ ylluminate的回答幫助:我已經改變了config.serve_static_assets選項設置爲true在配置/環境/ production.rb文件並重新啓動與

$rails server --environment=production 

和服務器現在它服務於壓縮資產。

注意:我也預編譯的資產

$bundle exec rake assets:precompile 

(稱之爲這種方式保證將用於choosen項目的耙版本,但我想用剛耙資產:預編譯將工作99%的時間)

1

哦,看看sprockets-image-compressor寶石,只需將它添加到您的Gemfile,它也會自動壓縮圖像資產(無損地使用pngcrush和j pegoptim)......我不知道這顆寶石是否堅如磐石,但是從我見過的我喜歡它!

+1

哇,謝謝你! – ylluminate