0

近几天我一直在尝试解决这个问题。

我正在尝试以生产模式在 Rails 站点上运行我的 ruby​​,但是(某些)资产无法提供服务。图像位于自定义子文件夹( app/assets/audio/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>

图片可以通过localhost:81/assets/demo-57cec01fc3b0b102085dc4de14576f8fd86f8298aed121ce17245df0546276d4.png直接访问,所以webserver(caddy)似乎没有问题。

我在 github ( https://github.com/Kafkalasch/RailsAssetsErrorDemo ) 上托管了一个简单的演示项目,以轻松重现该问题。

只需克隆项目,预编译资产 rails assets:precompile ,使用给定的 Caddyfile 启动 caddy 服务器, caddy -conf Caddyfile 然后使用 config/puma.production.rb 启动 puma puma -C RubyDemo/config/puma.production.rb

我正在使用:ruby 2.4.1 puma 3.10.0 rails 5.1.4 caddy 0.10.6

我可以在 Debian 和 Mac OS X 上重现这个问题,所以我不认为操作系统是相关的。

我想使用我的网络服务器来提供静态文件,所以我正在寻找其他解决方案,而不是简单地设置 config.assets.compile = true

有没有人有想法或提示我如何解决我的问题?

我很感激任何回应。

4

1 回答 1

1

我在生产和开发中使用 puma webserver 测试了您的应用程序。

mp3我通过在您的文件中包含和png文件的文件夹解决了该错误index.html.erb

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

因为您的图像和资产是在内部预编译的,public/assets/testfolder而不是public/assets

问题已经解决了

于 2017-09-25T01:49:40.317 回答