2014-01-10 7 views
5

У нас есть приложение, которое в настоящее время находится в Rails версии 2.3.12 и Ruby версии 1.8.7. Мы хотим обновить наше приложение до Rails 4.0 и Ruby 2.1.0. У нас около 200 моделей и 150 контроллеров.Обновление с Rails 2.3 до Rails 4.0

Я хотел бы знать, как много усилий, чтобы пройти процесс обновления. Также вы можете указать шаги, которые могут быть выполнены для обновления. Должны ли мы сначала обновить Ruby, а затем Rails или наоборот?

ответ

9

Что вы хотите достичь, это будет эпическое усилие. Я не могу предоставить вам пошаговые инструкции, потому что невозможно охватить все случаи в одном ответе.

Я рекомендую не обновлять Ruby и Rails в параллелях, но небольшими шагами.

Сложность самого обновления огромна, но это не невозможно, если у вас есть разумное тестовое покрытие вашего приложения. Я действительно надеюсь, что у вас есть тесты. Если вы этого не сделаете, вы не можете даже подумать, чтобы начать обновление, как это, и сначала вам нужно обеспечить минимальный охват продукта.

Мое предложение следовать Дорожной карты

  1. Upgrade рубин от 1.8.7 до 1.9.3. Rails 2.3 должен быть совместим с Ruby 1.9, и вы получите преимущество от новой версии Ruby. Фактически, несколько драгоценных камней отказались от поддержки Ruby 1.8.
  2. Оставьте приложение поселиться и запустить некоторое время, просто чтобы убедиться, что вы можете найти и исправить несовместимости. Каждый раз, когда вы находите проблему, воспроизводите ее с помощью теста, а затем исправьте ее.
  3. Обновление рельсов от 2.3 до 3.0.
  4. То же, что и в пункте 2.
  5. Обновления Рельсы от 3.0 до последней версии 3.x.
  6. То же, что и в пункте 2.
  7. Обновление Ruby с 1.9.3 до 2.0. Обновление должно быть тривиальным.
  8. То же точке 2.
  9. Обновление Rails от 3.x до последней версии

Несколько замечаний

  • Поэтому я предложил вам не обновить Rails 2.3 непосредственно до 4 , это потому, что это почти невозможно.
  • Причина, по которой я предложил вам не обновлять форму Rails 2.3 непосредственно до последней версии 3.x, это связано с тем, что от 3.0 до 3.x есть новая функция конвейера, которая вызовет несколько головных болей. Лучше обрабатывать этот шаг отдельно, а не в большом обновлении.
0

Для обновления версии рубинов и рельсов до новичка не требуется гораздо больше времени, но в коде вы должны изменить все запросы и области модели и все, что не работает в новой версии рельсов, устаревшей в новых рубин и рельсов. И еще одна вещь может быть много драгоценных камней, которые поддерживают рубин 1.8.7, не будут поддерживать новую рубиновую версию и то же самое для рельса. Мои предложения - это просто, вы сначала проверяете зависимости вашего приложения с новыми версиями и получаете решения. У меня есть знания об этом, потому что я также обновил полное приложение от ruby ​​1.8.7, rails 2.3.5 до ruby ​​1.9. 3 и рельсы 3.2.13.

3

Ruby 1.9 обрабатывает кодировку иначе, чем Ruby 1.8. Rails 2.3 недостаточно подготовлен к этому. вопросов часто приводят к фатальным ошибкам, и могут произойти в неожиданных местах (например, когда вы хотите, чтобы показать сообщение об ошибке)

Хороший (или страшно) Обзор находится на этой записи в блоге: http://www.rvdh.de/2010/01/06/why-you-cant-run-rails-23-apps-on-ruby-19/

I также потерял много времени, пытаясь принести Rails 2.3.x для работы с Ruby 1.9.x (Возможно, это возможно, если вы всегда используете простой ascii)

Итак, вам нужно сначала обновить Rails 3.0, а затем до Ruby 1.9.3 (или оба одновременно)

Конвейер активов хорош, когда он работает, но обновление достаточно сложно. Так что я бы просто отключил его, пока вы не на Rails 4.0.

С видами, как form_for helper, многое изменилось. Хорошо, когда у вас есть тесты, которые отображают каждый вид хотя бы один раз. Затем вы получите предупреждение о том, что изменилось. Если это нереально, попробуйте проверить все действия приложения вручную, а grep файлы журнала для предупреждений об устаревании. Многие ошибки в Rails 3.0 приведут к ошибкам или неправильному поведению в Rails 3.1.

+0

Да, я был немного рельсами 2.3 и рубином 1.9.x раньше. Кошмар для кодирования. Итак, я согласен, рельсы должны быть обновлены до 3.x * до того, как * ruby ​​будет обновлен с 1.8.x. – Ben

Смежные вопросы