У меня есть сайт на HTTPS, и я даю ссылки на изображения с относительными ссылками. Я создаю ссылку с помощью помощника по рельсам
<%= image_tag url_for(screenshot.attachment) %>
Что создает тег изображения, например
<img src = "/rails/blobs/myimage.jpg"/>
Хотя сайт находится на HTTPS, и я использую относительный путь, я получаю следующую ошибку CSP
Refused to load the image 'http://example.com/rails/blobs/myimage.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22screenshot.jpg%22%3B+filename%2A%3DUTF-8%27%27screenshot.jpg'
because it violates the following Content Security Policy directive: "img-src 'self' https: data:".
Я не понимаю, почему он пытается загрузить изображение по HTTP.
Я использую тег изображения, обновил свой вопрос выше. Статика просто показывает, какой HTML создается.
Из вашей конфигурации nginx необходимо выполнить переадресацию https. Тогда об этой проблеме позаботятся.
Добавьте only_path и установите для него значение false.
url_for(screenshot.attachment, :only_path => false)
По умолчанию он имеет значение false, но для уверенности добавьте его в свой помощник и посмотрите, как он работает.
Если это не поможет, вы можете создать полный URL-адрес, например
request.host + url_for(screenshot.attachment)
это не похоже на проблему с рельсами, если вы установите путь как статический, как в примере, он будет разрешен браузером, я думаю. если вы используете img_tag, этого не произойдет. если вы не можете изменить его на img_tag, попробуйте с этим, поставьте двойную косую черту в начале пути и посмотрите, работает ли это. Я дам ответ, если он сработает. что-то вроде <img src = "// rails / blobs / myimage.jpg" />