Ленивый сокращатель ссылок
Есть такой гем 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-файлов, у которых внутри прописан редирект на нужный сайт.
- Файлы эти заливаются на какой угодно хостинг, и выполняют свою функцию, редиректя посетителей куда надо.
- Решение платформонезависимо. Не зависит ни от какой фичи S3 или другой платформы. Можно переносить с хостинга на хостинг или с одного сайта на другой.
- Если файлы продолбались, их всегда можно перегенерить из конфига, который лежит в репозитории
- По желанию к этому можно припилить трэкинг количества нажатий, посылая перед редиректом запросы на какой-нибудь нехитрый бэкенд.
Реализация
Запилить реализацию оказалось делом 30 минут, большую часть из которых я разбирался как же работать со строками в баше. Короче вот: https://github.com/inem/redirects-generator. Работает.
Side notes
- Выяснилось что хостить на S3 такое не получится, так как урлы будут либо `aaa.html`, либо `aaa/`, что для сокращалки урлов как-то не очень
- Зато отыскался способ надурить амазоновский CDN, чтобы S3-шные редиректы продолжали работать: надо когда создаешь origin, не использовать автокомплит, а просто прописать бакет в формате `bucketname.s3.amazonaws.com`.
Короче, решил в итоге и изначальную задачу, и в общем виде под любую платформу. Пригодится.