Comments 31
А как насчет совместимости Rails 1-Rails 2-Rails 3-Rails 4, а то я уже слышал несколько страшных историй, как писалось для одного, а под другим не работало и приходилось все переписывать.
0
Всё очень просто — совместимости нет.
+4
Меняется мажор — теряется обратная совместимость.
semver.org/ же
semver.org/ же
+2
Если почитаете ссылки в статье, то увидите, что выкинутые фичи (31 и 26) вынесены в гемы. Подключаете гем — и работаете как раньше. 28, 24 и 23 сохраняют обратную совместимость (пока даже без Deprecation warning'ов). А 30, 29, 27, 25 и 22 — новые фичи. Так что у рельсов всё хорошо с совместимостью с предыдущей версией.
Ну а если вы до сих пор не переписали все вызовы к Active Record со времён Rails 2 и не подготовили проект к запуску на Ruby 1.9.3 — вы сами себе злой буратино. (Впрочем на одном из проектов я и сам до сих пор ничего этого не сделал).
Ну а если вы до сих пор не переписали все вызовы к Active Record со времён Rails 2 и не подготовили проект к запуску на Ruby 1.9.3 — вы сами себе злой буратино. (Впрочем на одном из проектов я и сам до сих пор ничего этого не сделал).
+2
Расскажите — очень интересно. Я с десяток проектов разного размера перетаскивал с 2 на 3, не заметил проблем. Максимум день на обновление. И вообще, генеральная линия рекоммендует обновляться сразу, по выходу релиза, хотябы потому, что может внезапно вырасти производительность. При регулярном обновлении «опа-опа deprication style» решает 146% трудностей перехода на новую версию.
«все переписывать» — вообще достойная реплика. Может там с django на rails переходили?
«все переписывать» — вообще достойная реплика. Может там с django на rails переходили?
-1
Мой опыт перехода с 3.0 на 3.2: заняло несколько недель, в основном ассеты — перевод на coffee (заодно рефакторинг)
повылазили некоторые баги, например scope :call в 3.0 был валидным, в 3.2 начинался подземный стук, причем, чтобы избавиться приходилось прибивать процесс (как в devel так и в продакшене)
Да и гемы разные пришлось обновлять или патчить, некоторые выкидывать, как не совместимые
повылазили некоторые баги, например scope :call в 3.0 был валидным, в 3.2 начинался подземный стук, причем, чтобы избавиться приходилось прибивать процесс (как в devel так и в продакшене)
Да и гемы разные пришлось обновлять или патчить, некоторые выкидывать, как не совместимые
+2
1. Никто не заставляет сразу брать и использовать coffee. Это ваше желание, а не требование Rails 3.2. Да и asset pipeline не тривиальная фича. Но никто не заставляет ее использоваться даже сейчас. Т.е. к обновлению не имеет отношения.
2. c :call — псевдобаг, не знаю точно всю картину, но вроде как в последних патчах все починено?
надо читать исходники, там по стеку ошибки все разбирается. Вроде как нет гарантии что :call будет вызван в нужном контексте, и может «улететь» не по адресу. Это да, это головоломка та еще, но это скорее недочет вызванный неопределенностью политики в отношении :call, нежели проблема обновления версии rails. Буду рад, если, например, 2kan возьмется и откроет глаза на эту проблему, если она все еще актуальна.
3. Гемы к рельсам имеют посредственное отношение. Т.е. к обновлению рельс не имеют отношения.
Итог:
Я согласен с вами, да действительно бывают такие случаи, когда обновление затруднительно. Но я не согласен когда «все приходится переписывать». Обновление редко вызывает головную боль, относится это чаще всего к крупным проектам, которых как известно меньшинство, и редко какой проект переживает смену мажорной версии.
Сами рельсы после обновления работают, за некоторыми неоднозначными исключениями, типа :call. Да это плохо, но это второй случай, когда я слышу об этом баге.
Гемы? гемы не всегда корректно работают и до обновления :) Рельсовики вашего уровня зачастую пользуются форками ;)
2. c :call — псевдобаг, не знаю точно всю картину, но вроде как в последних патчах все починено?
надо читать исходники, там по стеку ошибки все разбирается. Вроде как нет гарантии что :call будет вызван в нужном контексте, и может «улететь» не по адресу. Это да, это головоломка та еще, но это скорее недочет вызванный неопределенностью политики в отношении :call, нежели проблема обновления версии rails. Буду рад, если, например, 2kan возьмется и откроет глаза на эту проблему, если она все еще актуальна.
3. Гемы к рельсам имеют посредственное отношение. Т.е. к обновлению рельс не имеют отношения.
Итог:
Я согласен с вами, да действительно бывают такие случаи, когда обновление затруднительно. Но я не согласен когда «все приходится переписывать». Обновление редко вызывает головную боль, относится это чаще всего к крупным проектам, которых как известно меньшинство, и редко какой проект переживает смену мажорной версии.
Сами рельсы после обновления работают, за некоторыми неоднозначными исключениями, типа :call. Да это плохо, но это второй случай, когда я слышу об этом баге.
Гемы? гемы не всегда корректно работают и до обновления :) Рельсовики вашего уровня зачастую пользуются форками ;)
-1
Ну черкните пару строчек, я с радостью борюсь со своими ошибочными убеждениями, ну пожалуйстаааааа!
-1
Вы хороший программист, Ваш код нет никакой необходимости поддерживать. Очень хотел бы с Вами работать.
0
С переходом с 2.x на 3.x
— Пришлось переделывать все запросы ActiveRecord
— Пришлось переделывать роуты
— Стала ясна генеральная линия на jQuery и стало ясно, что для дальнейшего сопровождения проекта надо, как минимум убрать RJS, потому что он попросту перестал быть частью рельс ( которые по идее стали не зависимы от JS библиотеки ) и работал только с Prototype.
— В связи с этим встала перспектива переюзания всех JS хэлперов ( link_to_remote и так далее)
— Что то еще в хелперах поменялось
Вообщем работы было по каждомц проекту заметно, я чото не помню такой радужной миграции. Один проект я вообще заново сгенерил и перетаскивал потихоньку код в новый.
— Пришлось переделывать все запросы ActiveRecord
— Пришлось переделывать роуты
— Стала ясна генеральная линия на jQuery и стало ясно, что для дальнейшего сопровождения проекта надо, как минимум убрать RJS, потому что он попросту перестал быть частью рельс ( которые по идее стали не зависимы от JS библиотеки ) и работал только с Prototype.
— В связи с этим встала перспектива переюзания всех JS хэлперов ( link_to_remote и так далее)
— Что то еще в хелперах поменялось
Вообщем работы было по каждомц проекту заметно, я чото не помню такой радужной миграции. Один проект я вообще заново сгенерил и перетаскивал потихоньку код в новый.
0
Значит мне страшно повезло. Может сознание вытеснило… все эти трудности. Мои единороги весело прыгали через радугу.
Да… в 2.3-stable нету where, а значит запросы AR я тоже переписывал. Не помню, вот убейте. А если не помню — не было проблем. Проблемы забыть трудно.
ujs я юзал в новых проектах, поэтому к миграции старых было все готово, по крайней мере в голове. Я стараюсь включать необходимый рефаторинг в исполнение текущих задач, т.к. для рефакторинга ради рефакторинга времени никогда не хватает. А, и да, я последние полтора года один работаю на проектами, может как раз это и сказалось благотворно на апгрейды.
Как-то все вот так.
Да… в 2.3-stable нету where, а значит запросы AR я тоже переписывал. Не помню, вот убейте. А если не помню — не было проблем. Проблемы забыть трудно.
ujs я юзал в новых проектах, поэтому к миграции старых было все готово, по крайней мере в голове. Я стараюсь включать необходимый рефаторинг в исполнение текущих задач, т.к. для рефакторинга ради рефакторинга времени никогда не хватает. А, и да, я последние полтора года один работаю на проектами, может как раз это и сказалось благотворно на апгрейды.
Как-то все вот так.
0
Смысл обновляться, если не использовать основные возможности? По сути ради asset pipeline и обновлялся: полная загрузка сайта упала с 6 сек до 2.5 (много графики и клиентской части). Для этого нужно было переработать клиентскую часть, а с кофе читабельность кода гораздо улучшилась.
Гемы? К сожалению обновления рельс ломают совместимость, а без сторонних гемов может обойтись лишь небольшое приложение. Форки — да, активно использую
Конечно — все переписывать не нужно, но приходится повозиться, и иногда серьезно.
Гемы? К сожалению обновления рельс ломают совместимость, а без сторонних гемов может обойтись лишь небольшое приложение. Форки — да, активно использую
Конечно — все переписывать не нужно, но приходится повозиться, и иногда серьезно.
0
Мы в свое время переходили со 2х рельс на 3и — гемороя конечно добавило, но я бы не сказал, что там прям очень много проблем было. Все больше по мелочи — там роуты по другому немного работали, там еще фишки разные получились. Если именно переписывать, то проще получается, но когда пытаешься именно мигрировать приложение, вот тут да — уже начинаются траблы. Которые возникают скорее всего в некоторой неизученности нового инструмента скорее чем в реальных проблемах миграции…
0
Такие посты и призваны преодолеть проблемы при миграции. Весь масштаб работ по четвертой рельсе — очень прозрачен. Вся команда старается сделать его таковым. Принципиальная разница (при миграции) между третьей и четвертой версией будет намного меньше, чем между второй и третьей.
Переезд обещает быть плавным.
Переезд обещает быть плавным.
0
Ага я как раз пытался сунуться в RoR при переходе со 2-й на 3-ю версию.
Понял что беда и бардак надолго и благополучно осел на python кухне.
Понял что беда и бардак надолго и благополучно осел на python кухне.
-1
Вот так просто наша секта потеряла адепта :) стараемся больше не повторять ошибок ;)
+1
честно говоря цепляние всеми конечностями за обратную совеметимость, например в Django меня тоже не радует. Очень много bc legacy треша накопилось.
0
Совместимости, как уже сказали нет, но инструменты по переходу удобные. Плюс нужно думать головой и знать свой код. Так же, есть очень большой смысл держать проект на последнем стабильном релизе рельсов для вашей версии и сразу думать о переходе (в этом помогают рекоментации core team).
Переводили весной-летом проект со 2.3.8 до 3.2, при этом еще мигрировали на device и выкинули много старого кода, заменив рельсовым или добрыми гемами. Переход был достаточно комфортным.
Переводили весной-летом проект со 2.3.8 до 3.2, при этом еще мигрировали на device и выкинули много старого кода, заменив рельсовым или добрыми гемами. Переход был достаточно комфортным.
0
Чорт, я ещё Rails 4 не познал
+1
Будет конвертация приложения с 3.2 на 4 версию?
0
Вы имеете в виду возможность автоматизированного перехода? Зачем?
0
Так понимаю сам принцип фреймворка не позволяет это сделать. Было бы удобно перейти на новую версию с минимум временных затрат и дорабатывать проект под новой версией, используя новые удобные фишки. Как быть в ситуации, когда есть несколько проектов под rails 3 и хочется начать использование rails 4?
0
Основная тенденция Rails 4 — выделение всего базового ф-ционала в гемы. Вы можете начать использовать эти гемы уже сейчас, и постепенно переписывать под них код. Пример: Turbolinks, Strong Parameters, Rails Observers, Cache Digests.
Любой рельсовый проект в отдельно взятый отрезок времени — это зафиксированное состояние гемфайла и соответствующий этому всему код. В таком соответствии — все работает, потому что Вы подогнали друг под друга компоненты своей системы. Но только в таком. Я не могу представить себе адекватный способ автоматизированного перехода от одной версии рельс к другой (глобально, независимо от проекта), ведь это сопряжено с изменениями кода написанного именно Вами.
Также, переход может смягчить хорошее покрытие проекта тестами. Вы ведь хорошо покрыли его тестами, правда?
Любой рельсовый проект в отдельно взятый отрезок времени — это зафиксированное состояние гемфайла и соответствующий этому всему код. В таком соответствии — все работает, потому что Вы подогнали друг под друга компоненты своей системы. Но только в таком. Я не могу представить себе адекватный способ автоматизированного перехода от одной версии рельс к другой (глобально, независимо от проекта), ведь это сопряжено с изменениями кода написанного именно Вами.
Также, переход может смягчить хорошее покрытие проекта тестами. Вы ведь хорошо покрыли его тестами, правда?
+1
Надо бы пост обновить, еще 8 статей уже вышло:
Sprockets Rails
Russian Doll Caching & Cache Digests
What's new in Active Record
MiniTest
Rails::Plugin reaches end of life
ActiveResource Gem Extraction
Rails 4 is thread safe by default
Schema Cache Dump
Sprockets Rails
Russian Doll Caching & Cache Digests
What's new in Active Record
MiniTest
Rails::Plugin reaches end of life
ActiveResource Gem Extraction
Rails 4 is thread safe by default
Schema Cache Dump
+1
Sign up to leave a comment.
2013: Обратный отсчет до Rails 4