Как стать автором
Обновить

Комментарии 31

А как насчет совместимости Rails 1-Rails 2-Rails 3-Rails 4, а то я уже слышал несколько страшных историй, как писалось для одного, а под другим не работало и приходилось все переписывать.
Меняется мажор — теряется обратная совместимость.
semver.org/ же
Если почитаете ссылки в статье, то увидите, что выкинутые фичи (31 и 26) вынесены в гемы. Подключаете гем — и работаете как раньше. 28, 24 и 23 сохраняют обратную совместимость (пока даже без Deprecation warning'ов). А 30, 29, 27, 25 и 22 — новые фичи. Так что у рельсов всё хорошо с совместимостью с предыдущей версией.

Ну а если вы до сих пор не переписали все вызовы к Active Record со времён Rails 2 и не подготовили проект к запуску на Ruby 1.9.3 — вы сами себе злой буратино. (Впрочем на одном из проектов я и сам до сих пор ничего этого не сделал).
Месяца три назад тыкал рельсы палочкой, device не работал. Т.о переход не представляется возможным не ввиду обратной совместимости, а в виду не готовности всех гемов. Я пока боюсь. Хотя чего тут бояться — трясти нужно и репортить баги. Уж очень много вкусного.
Расскажите — очень интересно. Я с десяток проектов разного размера перетаскивал с 2 на 3, не заметил проблем. Максимум день на обновление. И вообще, генеральная линия рекоммендует обновляться сразу, по выходу релиза, хотябы потому, что может внезапно вырасти производительность. При регулярном обновлении «опа-опа deprication style» решает 146% трудностей перехода на новую версию.
«все переписывать» — вообще достойная реплика. Может там с django на rails переходили?
Мой опыт перехода с 3.0 на 3.2: заняло несколько недель, в основном ассеты — перевод на coffee (заодно рефакторинг)
повылазили некоторые баги, например scope :call в 3.0 был валидным, в 3.2 начинался подземный стук, причем, чтобы избавиться приходилось прибивать процесс (как в devel так и в продакшене)
Да и гемы разные пришлось обновлять или патчить, некоторые выкидывать, как не совместимые
1. Никто не заставляет сразу брать и использовать coffee. Это ваше желание, а не требование Rails 3.2. Да и asset pipeline не тривиальная фича. Но никто не заставляет ее использоваться даже сейчас. Т.е. к обновлению не имеет отношения.
2. c :call — псевдобаг, не знаю точно всю картину, но вроде как в последних патчах все починено?
надо читать исходники, там по стеку ошибки все разбирается. Вроде как нет гарантии что :call будет вызван в нужном контексте, и может «улететь» не по адресу. Это да, это головоломка та еще, но это скорее недочет вызванный неопределенностью политики в отношении :call, нежели проблема обновления версии rails. Буду рад, если, например, 2kan возьмется и откроет глаза на эту проблему, если она все еще актуальна.
3. Гемы к рельсам имеют посредственное отношение. Т.е. к обновлению рельс не имеют отношения.

Итог:
Я согласен с вами, да действительно бывают такие случаи, когда обновление затруднительно. Но я не согласен когда «все приходится переписывать». Обновление редко вызывает головную боль, относится это чаще всего к крупным проектам, которых как известно меньшинство, и редко какой проект переживает смену мажорной версии.
Сами рельсы после обновления работают, за некоторыми неоднозначными исключениями, типа :call. Да это плохо, но это второй случай, когда я слышу об этом баге.
Гемы? гемы не всегда корректно работают и до обновления :) Рельсовики вашего уровня зачастую пользуются форками ;)
Ну черкните пару строчек, я с радостью борюсь со своими ошибочными убеждениями, ну пожалуйстаааааа!
Вы хороший программист, Ваш код нет никакой необходимости поддерживать. Очень хотел бы с Вами работать.
С переходом с 2.x на 3.x
— Пришлось переделывать все запросы ActiveRecord
— Пришлось переделывать роуты
— Стала ясна генеральная линия на jQuery и стало ясно, что для дальнейшего сопровождения проекта надо, как минимум убрать RJS, потому что он попросту перестал быть частью рельс ( которые по идее стали не зависимы от JS библиотеки ) и работал только с Prototype.
— В связи с этим встала перспектива переюзания всех JS хэлперов ( link_to_remote и так далее)
— Что то еще в хелперах поменялось

Вообщем работы было по каждомц проекту заметно, я чото не помню такой радужной миграции. Один проект я вообще заново сгенерил и перетаскивал потихоньку код в новый.
Значит мне страшно повезло. Может сознание вытеснило… все эти трудности. Мои единороги весело прыгали через радугу.
Да… в 2.3-stable нету where, а значит запросы AR я тоже переписывал. Не помню, вот убейте. А если не помню — не было проблем. Проблемы забыть трудно.
ujs я юзал в новых проектах, поэтому к миграции старых было все готово, по крайней мере в голове. Я стараюсь включать необходимый рефаторинг в исполнение текущих задач, т.к. для рефакторинга ради рефакторинга времени никогда не хватает. А, и да, я последние полтора года один работаю на проектами, может как раз это и сказалось благотворно на апгрейды.
Как-то все вот так.
Старые AR-запросы работают в 3-х рельсах. Не знаю, выкинули ли их поддержку в 4-х рельсах, но раньше обещали вынести в отдельный гем. Опять же — подключил гем и переписывание пока можно отложить.
Смысл обновляться, если не использовать основные возможности? По сути ради asset pipeline и обновлялся: полная загрузка сайта упала с 6 сек до 2.5 (много графики и клиентской части). Для этого нужно было переработать клиентскую часть, а с кофе читабельность кода гораздо улучшилась.

Гемы? К сожалению обновления рельс ломают совместимость, а без сторонних гемов может обойтись лишь небольшое приложение. Форки — да, активно использую

Конечно — все переписывать не нужно, но приходится повозиться, и иногда серьезно.
Мы в свое время переходили со 2х рельс на 3и — гемороя конечно добавило, но я бы не сказал, что там прям очень много проблем было. Все больше по мелочи — там роуты по другому немного работали, там еще фишки разные получились. Если именно переписывать, то проще получается, но когда пытаешься именно мигрировать приложение, вот тут да — уже начинаются траблы. Которые возникают скорее всего в некоторой неизученности нового инструмента скорее чем в реальных проблемах миграции…
Такие посты и призваны преодолеть проблемы при миграции. Весь масштаб работ по четвертой рельсе — очень прозрачен. Вся команда старается сделать его таковым. Принципиальная разница (при миграции) между третьей и четвертой версией будет намного меньше, чем между второй и третьей.

Переезд обещает быть плавным.
Ну по вектору развития четвертых рельс я склонен с вами согласиться, но со вторых было конечно геморно…
Ага я как раз пытался сунуться в RoR при переходе со 2-й на 3-ю версию.
Понял что беда и бардак надолго и благополучно осел на python кухне.
Вот так просто наша секта потеряла адепта :) стараемся больше не повторять ошибок ;)
честно говоря цепляние всеми конечностями за обратную совеметимость, например в Django меня тоже не радует. Очень много bc legacy треша накопилось.
Deprecating policies должны быть максимально прозрачными для пользователя. Так, я точно знаю, что обновление до 4.0 не должно ломать мой код (конечно это, относится к проектам на руби 1.9), но должно заспамить меня предупреждениями. А релиз 4.1 уберет обратную совместимость полностью.
Совместимости, как уже сказали нет, но инструменты по переходу удобные. Плюс нужно думать головой и знать свой код. Так же, есть очень большой смысл держать проект на последнем стабильном релизе рельсов для вашей версии и сразу думать о переходе (в этом помогают рекоментации core team).

Переводили весной-летом проект со 2.3.8 до 3.2, при этом еще мигрировали на device и выкинули много старого кода, заменив рельсовым или добрыми гемами. Переход был достаточно комфортным.
Будет конвертация приложения с 3.2 на 4 версию?
Вы имеете в виду возможность автоматизированного перехода? Зачем?
Так понимаю сам принцип фреймворка не позволяет это сделать. Было бы удобно перейти на новую версию с минимум временных затрат и дорабатывать проект под новой версией, используя новые удобные фишки. Как быть в ситуации, когда есть несколько проектов под rails 3 и хочется начать использование rails 4?
Основная тенденция Rails 4 — выделение всего базового ф-ционала в гемы. Вы можете начать использовать эти гемы уже сейчас, и постепенно переписывать под них код. Пример: Turbolinks, Strong Parameters, Rails Observers, Cache Digests.

Любой рельсовый проект в отдельно взятый отрезок времени — это зафиксированное состояние гемфайла и соответствующий этому всему код. В таком соответствии — все работает, потому что Вы подогнали друг под друга компоненты своей системы. Но только в таком. Я не могу представить себе адекватный способ автоматизированного перехода от одной версии рельс к другой (глобально, независимо от проекта), ведь это сопряжено с изменениями кода написанного именно Вами.

Также, переход может смягчить хорошее покрытие проекта тестами. Вы ведь хорошо покрыли его тестами, правда?
Я поначалу каждый день обновлял, но потом решил 31 декабря обновить все сразу ;) спасибо
Я в оригинальном топике на RemarkableLabs не отслеживал, просматривал здесь. А тут смотрю — что-то давно нету постов. Кто ж знал, что Вы такой сюрприз готовите :)
Мой косяк ;)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации