Задать вопрос
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
  • Вопрос задан
  • 78 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 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 для хелперов, но это жесткий вариант слишком
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы