Обісрався з кроном

Час розваг! Місяць тому я рефакторив @Donate1024Bot, щоб прибрати node.js та npm з білдчейну.

Через кілька днів помітив що кнопки на інтерфейсі попердолило. З'ясувалося що кудись дівся CSS який відповідав за теми, і замість того щоб зафорсити світлу тему, воно вмикало системну, відповідно частину UI пердолило, бо вона не була заточна під темну. Замість того щоб розібратися, я накопіпастив css-варіаблів світлої теми в дефінішн темної. Ну типу

@media (prefers-color-scheme: dark) {
    :root {
        color-scheme: light;

Класно придумав, правда? Зробив так і забив.

На вихідних трохи мав часу, щоб нарешті замерджити фічу для сайту: список волонтерів, який зробила моя колега Олекса Лелека. Коли вже засів за мердж, давай думаю оновлю бібліотеку DaisyUI. Cкачав новий css, поклав у папку vendor, запустив, подивився, ніби майже нічого не зламалося. Посипалась пара елементів, але Олекса люб'язно підфіксила те що відпало та й по тому.

Далі пішов в адмінку, дивлюся, а там інпути не такі як мають бути. В DaisyUI вони з закругленими бордерами, а у мене — з прямокутними🤔 Знову прошу Олексу подивитися, каже що там чомусь не відпрацьовує потрібний CSS.

Починаю підозрювати, що ідея викинути ноду та збирати все тайлвіндівським бінарником не дуже спрацювала, бо є якісь бока. Деякий час дебажимо, але не знаходимо проблеми. Думаю що проблема таки точно у збірці, тому що DaisyUI підключається як Tailwind плагін, а якщо брати чисто CSS, то воно там може щось пропустити.

Тому наступного дня вирішую що треба вертати все взад. Збирати CSS не бінарником, а через ноду. Насправді я й раніше збирав бінарником, але сам css тягнув через npm. Тому то було не зовсім «вернути взад», швидше, «зробити по-іншому».

Сів, gem install cssbundling-rails, туди сюди, піф паф, yarn install, yarn build:css, там підфіксив, рефрешу — опа! Всі стилі стали як треба, а CSS скоротився в 19 разів. Походу все-таки або я той бінарник не так сконфігурив, або там щось не так.

Ну я такий задоволений ура ура, стилі на місці, все красиво.

Давай тепер то в докер імедж запхати, а ви знаєте, не так просто зібрати докупи Ruby та Node. Короче я ставлю dockerfile-rails, генерую Dockerfile де розумні люди за мене подумали як все так поставити, щоб не за всі гроші світу.

Зібрав поставив запустив, все працює! Нюанс тільки в тому, що в новому імеджі debian замість alpine. Ну, думаю, не проблема.

Деплою все туди сюди, запрацювало, сайт дзижчить. Дивлюся логи білда — впало. Нумо розбиратися — виявляється не встає підіймається crond який я запускаю окремим контейнером та який відповідає за те, щоб розіслати донаторам щоденний збір, звіт, оновити інфу по монобанках і так далі.

Перша проблема, в альпіні бінарник називається crond, а у дебіані cron. Геніально! Друга — відрізняються ключі. Міняю назву бінарника, міняю ключі... cron: can't open or create /var/run/crond.pid: Permission denied

Ну звісно, старий імедж в мене запускався з-під рута, а в новому яйцеголові зробили все по-сек'юрному, юзер 1000 і поїхав.

А тисячному юзеру ніхто не давав право запускати крон.

Сідаю з'ясовувати як то зробити правильно, гуглю, пробую всілякі cron.allow і chmod gu+rw /var/run && chmod gu+s /usr/sbin/cron звісно ця шляпа не працює. Ніби й помилок нема, але й джоби не запускаються.

Крон це знаєте штука яку не так легко продебажити. Логи не пишуться, ні помилки, ні успіху. Не розумію в чому річ. Кронтаб є, самі команди виконуються якщо запускати окремо.

Короче годину я з тим і так і так провозився, ніц не допомогло. Думаю ганьба, 2024, а людина не може крон в контейнері запустити.

У відчаї йду на fly.io думаю може там вже шось придумали. І такі да! Розумні люди плюнули на бінарник 50-и річної давності та зробили drop-in replacement який працює з-під юзера і не вимахується.

Називається Supercronic. В інструкції вже готовий набір для докерфайла, бери й запускай. Зкопіпастив, задеплоїв, вуаля! Все працює. І логи і пише і їсти не просить.

Fin.


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred