Rails:在生产模式下找不到资产,尽管由 caddy 正常提供
Rails: Assets cannot be found in production mode, although being served properly by caddy
近几天来我一直在努力解决这个问题。
我正尝试在 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直接访问,所以网络服务器(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
我正在使用:
ruby2.4.1
美洲狮 3.10.0
rails 5.1.4
球童 0.10.6
我可以在 Debian 和 Mac OS X 上重现这个问题,所以我不认为 OS 是相关的。
我想使用我的网络服务器来提供静态文件,所以我正在寻找其他解决方案而不是简单地设置
config.assets.compile = true
有没有人知道或提示我如何解决我的问题?
非常感谢任何回复。
我在生产和开发中使用 puma 网络服务器测试了您的应用程序。
我通过在您的 index.html.erb
文件中包含 mp3
和 png
文件的文件夹解决了这个错误。
<% provide(:img, "testfolder/demo.png") %>
<% provide(:audio, "testfolder/demo.mp3") %>
因为您的图像和资产是在 public/assets/testfolder
中预编译的,而不是 public/assets
问题已解决
近几天来我一直在努力解决这个问题。
我正尝试在 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直接访问,所以网络服务器(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
我正在使用: ruby2.4.1 美洲狮 3.10.0 rails 5.1.4 球童 0.10.6
我可以在 Debian 和 Mac OS X 上重现这个问题,所以我不认为 OS 是相关的。
我想使用我的网络服务器来提供静态文件,所以我正在寻找其他解决方案而不是简单地设置
config.assets.compile = true
有没有人知道或提示我如何解决我的问题?
非常感谢任何回复。
我在生产和开发中使用 puma 网络服务器测试了您的应用程序。
我通过在您的 index.html.erb
文件中包含 mp3
和 png
文件的文件夹解决了这个错误。
<% provide(:img, "testfolder/demo.png") %>
<% provide(:audio, "testfolder/demo.mp3") %>
因为您的图像和资产是在 public/assets/testfolder
中预编译的,而不是 public/assets
问题已解决