Заметки о релизе Ruby on Rails 7.0
Ключевые новинки в Rails 7.0:
Ключевые новинки в Rails 7.0:
- Требуется Ruby 2.7.0+, предпочтителен Ruby 3.0+
Апгрейд до Rails 7.0
Прежде чем апгрейднуть существующее приложение, было бы хорошо иметь перед этим покрытие тестами. Также, до попытки обновиться до Rails 7.0, необходимо сначала произвести апгрейд до Rails 6.1 и убедиться, что приложение все еще выполняется так, как нужно. Список вещей, которые нужно выполнить для апгрейда доступен в руководстве Апгрейд Ruby on Rails.
Основные особенности
Railties
За подробностями обратитесь к Changelog.
Удалено
- Удален устаревший
configвdbconsole.
Устарело
Значимые изменения
-
Sprockets теперь опциональная зависимость
Гем
railsбольше не зависим отsprockets-rails. Если вашему приложению все еще необходимо использовать Sprockets, убедитесь, что добавилиsprockets-railsв свой Gemfile.gem "sprockets-rails"
Action Cable
За подробностями обратитесь к Changelog.
Удалено
Устарело
Значимые изменения
Action Pack
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший
ActionDispatch::Response.return_only_media_type_on_content_type. -
Удален устаревший
Rails.config.action_dispatch.hosts_response_app. -
Удален устаревший
ActionDispatch::SystemTestCase#host!. -
Удалена устаревшая поддержка передачи пути в
fixture_file_uploadотносительноfixture_path.
Устарело
Значимые изменения
Action View
За подробностями обратитесь к Changelog.
Удалено
- Удален устаревший
Rails.config.action_view.raise_on_missing_translations.
Устарело
Значимые изменения
-
button_toвыводит действие HTTP [метод] из объекта Active Record, если для создания URL использован объектbutton_to("Do a POST", [:do_post_action, Workshop.find(1)]) # До #=> <input type="hidden" name="_method" value="post" autocomplete="off" /> # После #=> <input type="hidden" name="_method" value="patch" autocomplete="off" />
Action Mailer
За подробностями обратитесь к Changelog.
Удалено
- Удалены устаревшие
ActionMailer::DeliveryJobиActionMailer::Parameterized::DeliveryJobв пользуActionMailer::MailDeliveryJob.
Устарело
Значимые изменения
Active Record
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший аргумент - ключевое слово
databaseизconnected_to. -
Удален устаревший
ActiveRecord::Base.allow_unsafe_raw_sql. -
Удалена устаревшая опция
:spec_nameв методеconfigs_for. -
Удалена устаревшая поддержка загрузки YAML экземпляра
ActiveRecord::Baseв форматах Rails 4.2 и 4.1. -
Удалены предупреждения об устаревании, когда столбец
:intervalиспользуется в базе данных PostgreSQL.Теперь интервальные столбцы будут возвращать объекты
ActiveSupport::Durationвместо строк.Чтобы оставить старое поведение, можно добавить эту строчку в вашу модель:
attribute :column, :string -
Удалена устаревшая поддержка разрешения соединения используя
"primary"в качестве имени спецификации соединения. -
Удалена устаревшая поддержка обрамления объектов
ActiveRecord::Base. -
Удалена устаревшая поддержка приведения типа к значениям базы данных для объектов
ActiveRecord::Base. -
Удалена устаревшая поддержка передачи столбца в
type_cast. -
Удален устаревший метод
DatabaseConfig#config. -
Удалены устаревшие задачи rake:
db:schema:load_if_rubydb:structure:dumpdb:structure:loaddb:structure:load_if_sqldb:structure:dump:#{name}db:structure:load:#{name}db:test:load_structuredb:test:load_structure:#{name}
-
Удалена устаревшая поддержка в
Model.reorder(nil).firstискать с помощью недетерминированного упорядочивания. -
Удалены устаревшие аргументы
environmentиnameизTasks::DatabaseTasks.schema_up_to_date?. -
Удален устаревший
Tasks::DatabaseTasks.dump_filename. -
Удален устаревший
Tasks::DatabaseTasks.schema_file. -
Удален устаревший
Tasks::DatabaseTasks.spec. -
Удален устаревший
Tasks::DatabaseTasks.current_config. -
Удален устаревший
ActiveRecord::Connection#allowed_index_name_length. -
Удален устаревший
ActiveRecord::Connection#in_clause_length. -
Удален устаревший
ActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_name. -
Удален устаревший
ActiveRecord::Base.connection_config. -
Удален устаревший
ActiveRecord::Base.arel_attribute. -
Удален устаревший
ActiveRecord::Base.configurations.default_hash. -
Удален устаревший
ActiveRecord::Base.configurations.to_h. -
Удалены устаревшие
ActiveRecord::Result#map!иActiveRecord::Result#collect!. -
Удален устаревший
ActiveRecord::Base#remove_connection.
Устарело
- Устарел
Tasks::DatabaseTasks.schema_file_type.
Значимые изменения
-
Откат транзакций, когда блок возвращает раньше, чем ожидается.
До этого изменения, когда блок транзакции возвращал рано, транзакция подтверждалась.
Проблема в том, что таймауты, вызванные внутри блока транзакции, также приводили к тому, что незавершенная транзакция была подтверждена, поэтому для избежания этой ошибки, блок транзакции будет откачен.
-
Слияние условий на тот же самый столбец больше не поддерживает оба условия, и будет последовательно заменено на более позднее условие.
# Rails 6.1 (условие IN заменяется после слияния на равное условие) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] # Rails 6.1 (существуют оба конфликтующих условия, устарело) Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [] # Rails 6.1 с rewhere, чтобы мигрировать на поведение 7.0 Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob] # Rails 7.0 (то же поведение с условием IN, условие на слияемой части последовательно заменено) Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob] Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
Active Storage
За подробностями обратитесь к Changelog.
Удалено
Устарело
Значимые изменения
Active Model
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший перебор экземпляров
ActiveModel::Errorsкак Hash. -
Удален устаревший
ActiveModel::Errors#to_h. -
Удален устаревший
ActiveModel::Errors#slice!. -
Удален устаревший
ActiveModel::Errors#values. -
Удален устаревший
ActiveModel::Errors#keys. -
Удален устаревший
ActiveModel::Errors#to_xml. -
Удалена устаревшая поддержка соединения ошибок в
ActiveModel::Errors#messages. -
Удалена устаревшая поддержка
clearдля ошибок изActiveModel::Errors#messages. -
Удалена устаревшая поддержка
deleteдля ошибок изActiveModel::Errors#messages. -
Удалена устаревшая поддержка использования
[]=вActiveModel::Errors#messages. -
Удалена поддержка в загрузке Marshal и YAML формата ошибок Rails 5.x.
-
Удалена поддержка в загрузке Marshal формата Rails 5.x
ActiveModel::AttributeSet.
Устарело
Значимые изменения
Active Support
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший
config.active_support.use_sha1_digests. -
Удален устаревший
URI.parser. -
Удалена устаревшая поддержка использования
Range#include?для проверки включения значения в интервал даты/времени. -
Удален устаревший
ActiveSupport::Multibyte::Unicode.default_normalization_form.
Устарело
-
Устарела передача формата в
#to_sв пользу#to_fsвArray,Range,Date,DateTime,Time,BigDecimal,FloatиInteger.Это устаревание для того, чтобы позволить приложениям Rails воспользоваться оптимизацией Ruby 3.1, которая делает интерполяцию для некоторых типов объектов быстрее.
Новые приложения не будут иметь переопределенный метод
#to_sна этих классах, в существующих приложениях можно использоватьconfig.active_support.disable_to_s_conversion.
Значимые изменения
Active Job
За подробностями обратитесь к Changelog.
Удалено
-
Удалено устаревшее поведение, не прерывающее колбэки
after_enqueue/after_perform, когда предыдущий колбэк был прерван с помощьюthrow :abort. -
Удалена устаревшая опция
:return_false_on_aborted_enqueue.
Устарело
- Устарел
Rails.config.active_job.skip_after_callbacks_if_terminated.
Значимые изменения
Action Text
За подробностями обратитесь к Changelog.
Удалено
Устарело
Значимые изменения
Action Mailbox
За подробностями обратитесь к Changelog.
Удалено
-
Удален устаревший
Rails.application.credentials.action_mailbox.mailgun_api_key. -
Удалена устаревшая переменная окружения
MAILGUN_INGRESS_API_KEY.
Устарело
Значимые изменения
Ruby on Rails Guides
За подробностями обратитесь к Changelog.
Значимые изменения
Благодарности
Взгляните на полный список контрибьюторов Rails, на людей, которые потратили много часов, сделав Rails стабильнее и надёжнее. Спасибо им всем.