Ленивый сокращатель ссылок

Есть такой гем s3_website. Он помимо того что умеет заливать файлы на S3, позволяет в yaml-конфиге указывать редиректы с одних урлов на другие.

Я эту особенность нежно полюбил, и активно использовал в своих докладах — даешь красивую ссылку вида «inem.at/leanpoker», которая приредиректит тебя куда надо. Плюс, естественно, это добавляет гибкости — в любой момент можешь пойти и поменять «адрес назначения», если вдруг нашел более подходящую для объяснения предмета ссылку.

Вот так выглядит кусок конфига:

redirects:
  skillgrid:  http://t.nemytchenko.ru/skillgrid
  leanpoker:  http://t.nemytchenko.ru/leanpoker
  railsclub:  http://s3.inem.at/share/railsclub2015.pdf
  railshurts: http://railshurts.com

Год назад я перенес репу на ГитЛаб, и придумал в CI проверять ссылки на работоспособность с помощью awesome_bot:

awesome_bot s3_website.yml --allow-redirect --allow-dupe

Эта штука меня пару раз спасла от показывания битой ссылки на публику.

В общем все было бы круто, но в какой-то момент я решил прикрутить CDN к своему сайтику, и внезапно выяснилось, что за CDN эта крутая фича у Амазона тупо не работает.

Соответственно, и все мои «короткие ссылки» сейчас тоже не работают, но это сейчас уже и не настолько актуально, благо с докладами я сейчас выступаю гораздо реже.

Те не менее, у меня осталось ощущение обиды на ситуацию, и в какой-то момент мозг придумал решение.

Решение

Скрипт работающий по принципу «Static Site Generator». Редиректы, как и с s3_website прописываем в yaml-файл(можно даже синтаксис оставить), а скрипт генерит кучу почти пустых html-файлов, у которых внутри прописан редирект на нужный сайт.

  1. Файлы эти заливаются на какой угодно хостинг, и выполняют свою функцию, редиректя посетителей куда надо.
  2. Решение платформонезависимо. Не зависит ни от какой фичи S3 или другой платформы. Можно переносить с хостинга на хостинг или с одного сайта на другой.
  3. Если файлы продолбались, их всегда можно перегенерить из конфига, который лежит в репозитории
  4. По желанию к этому можно припилить трэкинг количества нажатий, посылая перед редиректом запросы на какой-нибудь нехитрый бэкенд.

Реализация

Запилить реализацию оказалось делом 30 минут, большую часть из которых я разбирался как же работать со строками в баше. Короче вот: https://github.com/inem/redirects-generator. Работает.

Side notes

  1. Выяснилось что хостить на S3 такое не получится, так как урлы будут либо `aaa.html`, либо `aaa/`, что для сокращалки урлов как-то не очень
  2. Зато отыскался способ надурить амазоновский CDN, чтобы S3-шные редиректы продолжали работать: надо когда создаешь origin, не использовать автокомплит, а просто прописать бакет в формате `bucketname.s3.amazonaws.com`.

Короче, решил в итоге и изначальную задачу, и в общем виде под любую платформу. Пригодится.

Поделиться
Отправить
2017   Фигачу
Популярное