2017-09-24 59 views
0

我幾個星期以來一直在嘗試解決這個問題。Rails:在生產模式下找不到資產,雖然由caddy正確地提供服務

我試圖在生產模式下在Rails站點上運行我的ruby,但(部分)資產無法提供。這些圖像都位於一個自定義的子文件夾(應用程序/資產/音頻/ testfolder/demo.png),它被添加到Rails.application.config.assets.paths和正確預編譯,但我總是得到錯誤

ActionView::Template::Error (The asset "demo.png" is not present in the asset pipeline.) 

或更具體:

I, [2017-09-25T00:38:32.859541 #41037] INFO -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] Started GET "/" for 127.0.0.1 at 2017-09-25 00:38:32 +0200 
I, [2017-09-25T00:38:32.860377 #41037] INFO -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] Processing by TestControllerController#index as HTML 
I, [2017-09-25T00:38:32.861240 #41037] INFO -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] Rendering test_controller/index.html.erb within layouts/application 
I, [2017-09-25T00:38:32.861558 #41037] INFO -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] Rendered test_controller/index.html.erb within layouts/application (0.1ms) 
I, [2017-09-25T00:38:32.863790 #41037] INFO -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] Completed 500 Internal Server Error in 3ms 
F, [2017-09-25T00:38:32.864505 #41037] FATAL -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] 
F, [2017-09-25T00:38:32.864789 #41037] FATAL -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1] ActionView::Template::Error (The asset "demo.png" is not present in the asset pipeline.): 
F, [2017-09-25T00:38:32.865058 #41037] FATAL -- : [dd7b2824-614f-4e55-ba32-83548f79b2e1]  10: 
[dd7b2824-614f-4e55-ba32-83548f79b2e1]  11: <body> 
[dd7b2824-614f-4e55-ba32-83548f79b2e1]  12:  <%= yield %> 
[dd7b2824-614f-4e55-ba32-83548f79b2e1]  13:  <%= image_tag(yield(:img)) %> 
[dd7b2824-614f-4e55-ba32-83548f79b2e1]  14:  <audio src="<%= audio_path(yield(:audio))%>" type="audio/mpeg" controls preload="none"></audio> 
[dd7b2824-614f-4e55-ba32-83548f79b2e1]  15: </body> 
[dd7b2824-614f-4e55-ba32-83548f79b2e1]  16: </html> 

圖像可以由本地主機進行訪問:81 /資產/直接演示57cec01fc3b0b102085dc4de14576f8fd86f8298aed121ce17245df0546276d4.png,所以web服務器(盤盒)似乎並不成爲問題。

我在github上託管了一個簡單的演示項目(https://github.com/Kafkalasch/RailsAssetsErrorDemo)以輕鬆地重現問題。

只是克隆項目,預編譯的資產 rails assets:precompile ,開始給定Caddyfile球童服務器, caddy -conf Caddyfilepuma -C RubyDemo/config/puma.production.rb

我使用開始PUMA與配置/ puma.production.rb: 紅寶石2.4.1 彪馬3.10.0 軌5.1.4 球童0.10.6

我能複製在Debian和Mac OS X這個問題,所以我不認爲操作系統是相關的。

我想用我的網絡服務器來提供靜態文件,所以我找了一個其他的解決辦法不是簡單地設置 config.assets.compile = true

有沒有人有一個想法,或者我怎麼能解決我的問題,任何暗示?

我很感激任何迴應。

+1

你嘗試清空緩存?在Rails控制檯中運行'$ Rails.cache.clear',它多次爲我解決了這個問題。 –

+0

我現在做過。沒有改變任何東西。 – Kafkalasch

+0

我配置了您的應用程序。開發很好,我可以在'localhost:3000/assets/demo.png'處看到資產,資產是指紋資產...然後生產出現錯誤。但我看不到使用'rails s -e production'在本地機器上運行的日誌。您已經完成了許多配置,聽起來不是必需的,我無法弄清楚如何讓生產顯示此錯誤消息的文本。這必須連接到你已經完成的配置與服務器 –

回答

0

我在生產和開發中使用puma webserver測試了您的應用程序。

我通過在index.html.erb文件中包含mp3png文件的文件夾解決了錯誤。

<% provide(:img, "testfolder/demo.png") %> 
<% provide(:audio, "testfolder/demo.mp3") %> 

因爲你的圖像和資產內部public/assets/testfolder而不是public/assets

問題是解決了預編譯

+0

謝謝,有時是這麼簡單... – Kafkalasch

+0

我以爲我已經嘗試瞭解決方案... – Kafkalasch

+0

@Kafkalasch解決了這個問題,我們需要深入挖掘並理解你的配置有什麼問題。還有其他SO關於這個問題的帖子,所以我們會解決這個問題。謝謝 –

相關問題