В действительности все совсем не так, как на самом деле.
Любви к Руби постПосле всех мытарств с переносом сервера с PHP 5.6 и MySQL 5.5 на, соответственно, версии 7.4 и 8.0 мне, кажется, стало скучно и захотелось перенести еще и наш замшелый багтрекер, Мантис. В версию поновее 2014 года, а в идеале - вообще в Redmine. Можно? А пожалуйста! Вон даже специальные скрипты для миграции есть, все для вашего удовольствия. Меня не смутило даже то, что Мантис - на похапе, а Редмайн - вполне себе на Руби, а это совсем другая трава. И азъ познал. Не дзен или прочие подобные пошлости. Просто познал.
Итак, в итоге процесс первую треть выглядел так:
1. Есть установочный Redmine, с миграциями для базовой базы данных - две штуки, одна для структуры, другая - для базового контента.
2. Есть скрипт миграции с мантиса на редмайн. который перебирает все таблицы мантиса, обсасывает и переносит в нужные места в редмайне.
3. Есть беда - он пытается обработать и несуществующие поля мантиса. Что поделать, писался скрипт для мантиса современного, а скармливал я ему версию шестилетней давности. Обрабатывать ошибки его не научили, поэтому он всякий раз на таких моментах падает. Благо хоть трейс показывает с информациейц о номере строки, в которой все упало.
4. Началась веселуха:
а. удалить базу редмайна; создать базу для редмайна с нуля из двух миграций.
б. запустить миграцию mantis->redmine
в. поймать ошибку, попытаться ее исправить в коде миграции (а там Ruby, которого я доселе в глаза не видал)
г. while (в. === error) continue
Где-то с восьмой итерации оно таки согласилось работать. Я к концу все еще хихикал.
Пошли дальше. Редмайн поднялся, я написал во флуд-чат что-то восторженное и не очень приличное. Нюанс: поднялся-то он на локальной машине, при мускуле 5.7. А что такое обратная совместимость между версией 8 и какой-нибудь из 5-х, мной было горько осознано вчера, после многочасовых попыток понять, что не так в названии столбца "groups". Видимо, это было недостаточно четко и программный мир решил пояснить за всю боль.
На боевом вэпээс все началось неплохо. Все прям по инструкции - ровно до того момента, пока дело не дошло до запуска. Вот нет его. Почему? А Торвальдс его знает, ничто не предвещало. Если быть точнее, то проблемы начались на стадии миграции бд - только не того плана, что были с подхватыванием базы мантиса, а еще раньше, при создании скриптом мускуль-бд как таковой. "Ну ладно, всякое бывает" - почесал в затылке оптимистичный я и залил базу напрямую, благо, она после локальных попыток была вполне актуальна. И да, хоть и не во все 29, но я все еще улыбался.
Для того, чтобы завести Редмайн, нужен, что логично, сервер. В идеале - Апач, тогда там то ли специальный модуль есть, то ли на уровне cgi оно встраивается - не суть. Важно то, что у нас-то - модный nginx, все упоминания пакетов Апача я самолично очень старательно вымарывал из системы. И с ним все интереснее - ставить надо дополнительный рубишный сервак, Thin, чуть ли не специально для такого случай сделанный. Серьезно - там даже в базовом конфиге Редмайн по умолчанию прописан, хотя при дальнейших исследованиях всяческих stackoverflow были обнаружены упоминания и других рельс. Так или иначе, этот thin прекрасно поднимался и работал на локальной машине. И столь же решительно отказался это делать на машине боевой, изображая из себя то кривого, то безногого, то безмозглого ущербного. Сервер шредингера: подниматься-то поднимался, но вот работать... Первое время он при попытках запуска выдавал такой лог ошибок, что оный попросту не помещался в терминал, не реагируя даже на попытки перенаправить вывод в файл (что поделать, Руби, Китай, своя атмосфера). Мне уже не весело. Курю stackoverflow.
Ага! Вот есть пара пакетов, которые можно поставить. Заработало? Нет, но по крайней мере я добился того, что все свои причитания эта шайтан-орба начала выдавать в положенный ему по закону лог вместо терминала. С интересом вчитываюсь в эти строки. Нихрена не понятно. Опять иду спрашивать совета у гугла. Нервничаю и огрызаюсь на периодически пепякающий вк.
Хренадцатая по счету статья дала уникальное знание: оказывается, Редмайн вообще не расчитан на MySQL 8. Слишком, де, новье. И ладно бы только Редмайн - так у Рубей с этим вообще все не ладно. Пробую разные варианты мускуль-коннекторов (в том числе условно-несовместимые с Редмайном). Все как обычно. Поскрипывая зубами (пятый час вожусь уже) и, стараясь не сломать ноут, иду смотреть, как это делается в принципе. Не хотел курить Руби с рельсами - а хотя бы в паре аспектов пришлось. Благо, хотя бы часть тематических либ в системе уже стояла - неделей ранее был страстный секс с установкой через npm Grunt-а и компилятора для SASS (который почему-то тоже на Руби, хотя казалось бы). Курю ман по установке Редмайна на Мускуль 8 и CentOS (нашлось хотя бы такое, амен!). Правда, оно для Апача, но тут что-нибудь придумаем.
Ага, вот оно. Тут упоминается Руби версии 2.4, что для репозиториев родного Дебиана, как водится, шибко новье и вообще unstable. Качаю курлом с оф-сайта установщик - и не руби даже, а менеджера-переключателя Руби. Старательно отгоняю от себя мысли о шизофрении. Установщик отказывается работать - гпг2-ключи ему не але, второй версии мы не знаем. Ставлю обработчик гпг2 - и фиг там. Может, ему надо было apt update сделать?.. В общем, ставлю руками. Долго ли - коротко ли (успел за это время пообедать), а установило. Ключ. Потом еще компилировало (судя по всему, таки из С-исходников) переключатель. А потом - версии Руби 2.4 и, почему-то, 2.7. Ладно, угу. Запускаю, обновляю пакетным менеджером списки гемов, необходимые для я-уже-смутно-сознаю-чего. Панеслася. Нервно тарабаню пальцами по подлокотнику и огрызаюсь на программы-общалки. Обновило, но не завелось. При попытке запуска Thin-а ругается, что сиротинушке не установили нужных пакетов. Внимательно смотрю на пакеты. Они есть. Смотрю на ругательства. Они после повторного запуска интонаций не меняют. Иду спрашивать гугл.
После получаса раскуривания советов (90% их почему-то касалось макоси, оставшиеся 10% - вольных переложений на тему того, куда нужно пойти тому, кто отказывается откатываться к версии MySQL 5.7) сдаюсь и пробую поставить Thin из основного репозитория Дебиана. Успех относителен - запускается эта штука без проблем, только вот делать ничего не хочет - в том числе не возникло у него желания хоть как-то обрабатывать скормленный ему ямл-конфиг для запуска Редмайна. Ошибку бы выдал, что ли... Скорблю. Удаляю репо-thin, удаляю версию, собранную Рубей на основе конфига пакетов из установочного Редмайна. Ставлю отдельно руками через пакетный менеджер гемов. Ни на что не надеясь и пребывая в унынии, запускаю. Не работает. Стараюсь отвлечься от желания убивать. Попутно вспоминаю про встроенный сервер, который ни в коем случае нельзя использовать на проде - но что я теряю? Пробую. Работает! Значит, коннектор базы ожил. Вырубаю встроенный сервак - он и так зело тормозюч и неуклюж - и пробую еще раз подружиться с Thin-ом. В энцатой попытки он начал выдавать ошибку чисто символических объемов - на какие-то пол-экрана. Лезу в настройки хоста для обоих серверов, меняю все выходы с системных директорий на соответствующие в директории проекта. Перезапуск и - ну не верю своим глазам! Кончил и закурил.
Итого процесс по хорошему выглядит так:
1. Ставим rvm, через него - руби 2.4, переключаемся на него.
2. Руками ставим сервер Тhin, включаем его и разрешаем автозапуск.
3. Подхватываем пакет Редмайна (я брал с гитхаба, но это на вкус).
4. Подтягиваем все гем-зависимости.
5. Собираем конфиги для Thin и Nginx (этого добра в сети полно).Старательно перенаправляем в них все ссылки на thin.pid и thin.sock в директорию проекта с абсолютными адресами.
6. Ставим базу, юзеров, доступы и прочую мелкую техническую ерунду.
7. Перезапускаем, материмся, правим и радуемся.
Честно говоря, по итогам всей этой возни я упустил тот момент, когда глюки странные и невменяемые превратились в нечто хотя бы подверженное гуглению и анализу. Но в конечном счете это не так и важно. Я смогу это повторить. С улыбкой на лице.
Итак, в итоге процесс первую треть выглядел так:
1. Есть установочный Redmine, с миграциями для базовой базы данных - две штуки, одна для структуры, другая - для базового контента.
2. Есть скрипт миграции с мантиса на редмайн. который перебирает все таблицы мантиса, обсасывает и переносит в нужные места в редмайне.
3. Есть беда - он пытается обработать и несуществующие поля мантиса. Что поделать, писался скрипт для мантиса современного, а скармливал я ему версию шестилетней давности. Обрабатывать ошибки его не научили, поэтому он всякий раз на таких моментах падает. Благо хоть трейс показывает с информациейц о номере строки, в которой все упало.
4. Началась веселуха:
а. удалить базу редмайна; создать базу для редмайна с нуля из двух миграций.
б. запустить миграцию mantis->redmine
в. поймать ошибку, попытаться ее исправить в коде миграции (а там Ruby, которого я доселе в глаза не видал)
г. while (в. === error) continue
Где-то с восьмой итерации оно таки согласилось работать. Я к концу все еще хихикал.
Пошли дальше. Редмайн поднялся, я написал во флуд-чат что-то восторженное и не очень приличное. Нюанс: поднялся-то он на локальной машине, при мускуле 5.7. А что такое обратная совместимость между версией 8 и какой-нибудь из 5-х, мной было горько осознано вчера, после многочасовых попыток понять, что не так в названии столбца "groups". Видимо, это было недостаточно четко и программный мир решил пояснить за всю боль.
На боевом вэпээс все началось неплохо. Все прям по инструкции - ровно до того момента, пока дело не дошло до запуска. Вот нет его. Почему? А Торвальдс его знает, ничто не предвещало. Если быть точнее, то проблемы начались на стадии миграции бд - только не того плана, что были с подхватыванием базы мантиса, а еще раньше, при создании скриптом мускуль-бд как таковой. "Ну ладно, всякое бывает" - почесал в затылке оптимистичный я и залил базу напрямую, благо, она после локальных попыток была вполне актуальна. И да, хоть и не во все 29, но я все еще улыбался.
Для того, чтобы завести Редмайн, нужен, что логично, сервер. В идеале - Апач, тогда там то ли специальный модуль есть, то ли на уровне cgi оно встраивается - не суть. Важно то, что у нас-то - модный nginx, все упоминания пакетов Апача я самолично очень старательно вымарывал из системы. И с ним все интереснее - ставить надо дополнительный рубишный сервак, Thin, чуть ли не специально для такого случай сделанный. Серьезно - там даже в базовом конфиге Редмайн по умолчанию прописан, хотя при дальнейших исследованиях всяческих stackoverflow были обнаружены упоминания и других рельс. Так или иначе, этот thin прекрасно поднимался и работал на локальной машине. И столь же решительно отказался это делать на машине боевой, изображая из себя то кривого, то безногого, то безмозглого ущербного. Сервер шредингера: подниматься-то поднимался, но вот работать... Первое время он при попытках запуска выдавал такой лог ошибок, что оный попросту не помещался в терминал, не реагируя даже на попытки перенаправить вывод в файл (что поделать, Руби, Китай, своя атмосфера). Мне уже не весело. Курю stackoverflow.
Ага! Вот есть пара пакетов, которые можно поставить. Заработало? Нет, но по крайней мере я добился того, что все свои причитания эта шайтан-орба начала выдавать в положенный ему по закону лог вместо терминала. С интересом вчитываюсь в эти строки. Нихрена не понятно. Опять иду спрашивать совета у гугла. Нервничаю и огрызаюсь на периодически пепякающий вк.
Хренадцатая по счету статья дала уникальное знание: оказывается, Редмайн вообще не расчитан на MySQL 8. Слишком, де, новье. И ладно бы только Редмайн - так у Рубей с этим вообще все не ладно. Пробую разные варианты мускуль-коннекторов (в том числе условно-несовместимые с Редмайном). Все как обычно. Поскрипывая зубами (пятый час вожусь уже) и, стараясь не сломать ноут, иду смотреть, как это делается в принципе. Не хотел курить Руби с рельсами - а хотя бы в паре аспектов пришлось. Благо, хотя бы часть тематических либ в системе уже стояла - неделей ранее был страстный секс с установкой через npm Grunt-а и компилятора для SASS (который почему-то тоже на Руби, хотя казалось бы). Курю ман по установке Редмайна на Мускуль 8 и CentOS (нашлось хотя бы такое, амен!). Правда, оно для Апача, но тут что-нибудь придумаем.
Ага, вот оно. Тут упоминается Руби версии 2.4, что для репозиториев родного Дебиана, как водится, шибко новье и вообще unstable. Качаю курлом с оф-сайта установщик - и не руби даже, а менеджера-переключателя Руби. Старательно отгоняю от себя мысли о шизофрении. Установщик отказывается работать - гпг2-ключи ему не але, второй версии мы не знаем. Ставлю обработчик гпг2 - и фиг там. Может, ему надо было apt update сделать?.. В общем, ставлю руками. Долго ли - коротко ли (успел за это время пообедать), а установило. Ключ. Потом еще компилировало (судя по всему, таки из С-исходников) переключатель. А потом - версии Руби 2.4 и, почему-то, 2.7. Ладно, угу. Запускаю, обновляю пакетным менеджером списки гемов, необходимые для я-уже-смутно-сознаю-чего. Панеслася. Нервно тарабаню пальцами по подлокотнику и огрызаюсь на программы-общалки. Обновило, но не завелось. При попытке запуска Thin-а ругается, что сиротинушке не установили нужных пакетов. Внимательно смотрю на пакеты. Они есть. Смотрю на ругательства. Они после повторного запуска интонаций не меняют. Иду спрашивать гугл.
После получаса раскуривания советов (90% их почему-то касалось макоси, оставшиеся 10% - вольных переложений на тему того, куда нужно пойти тому, кто отказывается откатываться к версии MySQL 5.7) сдаюсь и пробую поставить Thin из основного репозитория Дебиана. Успех относителен - запускается эта штука без проблем, только вот делать ничего не хочет - в том числе не возникло у него желания хоть как-то обрабатывать скормленный ему ямл-конфиг для запуска Редмайна. Ошибку бы выдал, что ли... Скорблю. Удаляю репо-thin, удаляю версию, собранную Рубей на основе конфига пакетов из установочного Редмайна. Ставлю отдельно руками через пакетный менеджер гемов. Ни на что не надеясь и пребывая в унынии, запускаю. Не работает. Стараюсь отвлечься от желания убивать. Попутно вспоминаю про встроенный сервер, который ни в коем случае нельзя использовать на проде - но что я теряю? Пробую. Работает! Значит, коннектор базы ожил. Вырубаю встроенный сервак - он и так зело тормозюч и неуклюж - и пробую еще раз подружиться с Thin-ом. В энцатой попытки он начал выдавать ошибку чисто символических объемов - на какие-то пол-экрана. Лезу в настройки хоста для обоих серверов, меняю все выходы с системных директорий на соответствующие в директории проекта. Перезапуск и - ну не верю своим глазам! Кончил и закурил.
Итого процесс по хорошему выглядит так:
1. Ставим rvm, через него - руби 2.4, переключаемся на него.
2. Руками ставим сервер Тhin, включаем его и разрешаем автозапуск.
3. Подхватываем пакет Редмайна (я брал с гитхаба, но это на вкус).
4. Подтягиваем все гем-зависимости.
5. Собираем конфиги для Thin и Nginx (этого добра в сети полно).Старательно перенаправляем в них все ссылки на thin.pid и thin.sock в директорию проекта с абсолютными адресами.
6. Ставим базу, юзеров, доступы и прочую мелкую техническую ерунду.
7. Перезапускаем, материмся, правим и радуемся.
Честно говоря, по итогам всей этой возни я упустил тот момент, когда глюки странные и невменяемые превратились в нечто хотя бы подверженное гуглению и анализу. Но в конечном счете это не так и важно. Я смогу это повторить. С улыбкой на лице.
@музыка: Fatal Rain