etspring
@etspring
Начитанное быдло

Возможно ли сделать гиперссылку определенного вида в рельсах?

Доброго времени суток!
ENV: Rails 5.1.4

Имеется сервис (2-3 страницы). Все ресурсы ( картинки, фонты, и тд ) находятся в ассетах.
те
<%= image_tag "logo.png" %>
даст нам
<img src="/assets/logo-b99dbe0ace3298702942689991a789129fcfb13538ad3216f6eee9c805c5a3af.png" alt="Logo">


Внезапно потребовалось, чтобы ссылки на ресурсы имели вид:
начинались с точки
<img src="./assets/logo-b99dbe0ace3298702942689991a789129fcfb13538ad3216f6eee9c805c5a3af.png" alt="Logo">

или
были без первого /
<img src="assets/logo-b99dbe0ace3298702942689991a789129fcfb13538ad3216f6eee9c805c5a3af.png" alt="Logo">


Это необходимо для проксирования через nginx.
На моей стороне puma + стандартный конфиг nginx
На удаленной стороне что-то вида:
location /fff/bbb/ccccc/ {
proxy_pass http://putin.ru;
}


Скажу честно - меня это некоторым образом смутило и повергло в уныние.
Эксперименты с assets.prefix и relative_url_root результатов не дали.
В связи с чем у меня 2 вопроса?
1. Такое вообще возможно?
2. Если возможно, то каким образом это можно реализовать в данном случае?

P.S: Заранее спасибо за ответ. С меня как обычно - тонны респектов и уважения!
P.P.S: Подозреваю, что это всё таки делается средствами nginx
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@ark_m
Думаю, самым простым вариантом будет использование asset_path с интерполяцией:

<img src="<%= ".#{asset_path 'logo.png'}" %>" alt="Logo">
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
2ord
@2ord
продвинутый чайник
Сам URL-ы генерируются в RoR, а nginx лишь отдаёт контент, не более того.

edgeguides.rubyonrails.org/asset_pipeline.html#cha...
The public path that Sprockets uses by default is /assets .

This can be changed to something else:
config.assets.prefix = "/some_other_path"

Нужно поправить файл config/environments/production.rb

https://stackoverflow.com/a/37918186

Альтернативно, можно вообще хранить всю статику на отдельном CDN сервере:
config.action_controller.asset_host = 'cloudfront.mysite.com'

DNS:
cloudfront (.mysite.com) CNAME --> mysite.cloudfront.com
Ответ написан
Комментировать
etspring
@etspring Автор вопроса
Начитанное быдло
пробовал, ссылок вида ./assets/ через это не получишь

пока только сделал monkeypatch для хелперов, но это жесткий вариант слишком
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы