Rails: активы не могут быть найдены в производственном режиме, хотя они должным образом обслуживаются кэдди.

Я пытаюсь решить эту проблему уже почти сутки.

Я пытаюсь запустить свой сайт ruby ​​on rails в производственном режиме, но (некоторые) ресурсы не могут быть обслужены. Изображения находятся в пользовательской подпапке ( 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 , запустите caddy-сервер с заданным Caddyfile, caddy -conf Caddyfile и запустите puma с помощью config/puma.production.rb 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

Есть ли у кого-нибудь идея или намек, как я могу решить свою проблему?

Я благодарен за любой ответ.


person Kafkalasch    schedule 24.09.2017    source источник
comment
ты пробовал чистить кеш? в консоли Rails запустите $ Rails.cache.clear, это много раз решало эту проблему для меня.   -  person Mahmoud Sayed    schedule 25.09.2017
comment
Я сделал сейчас. Ничего не менял.   -  person Kafkalasch    schedule 25.09.2017
comment
Я настроил ваше приложение. Разработка идет нормально, и я вижу актив в localhost:3000/assets/demo.png, актив - это отпечаток пальца ... затем в производстве возникает ошибка. но я не вижу журналы работы на моей локальной машине с rails s -e production. Вы сделали много настроек, слышите, это не обязательно, и я не могу понять, как сделать так, чтобы производство отображало текст этого сообщения об ошибке. Это должно быть связано с конфигурацией, которую вы сделали с сервером.   -  person Fabrizio Bertoglio    schedule 25.09.2017


Ответы (1)


Я протестировал ваше приложение с веб-сервером puma в производстве и разработке.

Я решил эту ошибку, включив папку для файлов mp3 и png в ваш файл index.html.erb.

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

потому что ваши изображения и ресурсы предварительно скомпилированы внутри public/assets/testfolder вместо public/assets

Проблема решена

person Fabrizio Bertoglio    schedule 25.09.2017
comment
@Kafkalasch, который решает проблему, нам нужно копнуть глубже и понять, что не так с вашей конфигурацией. Есть другие сообщения SO об этой проблеме, поэтому мы решим это. Спасибо - person Fabrizio Bertoglio; 25.09.2017
comment
Привет, Фабрицио! Я не совсем уверен, хорошо ли я тебя понимаю. Что вам нужно? Видимо, я просто использовал неправильные пути. Какие файлы конфигурации вам нужны? - person Kafkalasch; 26.09.2017
comment
@Kafkalasch это хорошо, но я слежу за похожей проблемой " title="precompile rails 5 для включения всех ресурсов"> stackoverflow.com/questions/46108401/, где каким-то образом ресурсы предварительно скомпилированы в подпапке с именем public/assets/assets, и звездочки не найдут их, в любом случае ваша проблема решена, но следуйте этот пост на случай, если мы найдем лучшее понимание проблемы - person Fabrizio Bertoglio; 26.09.2017