rubyonrails.org에서 더 보기:

1 Rails 7.0으로 업그레이드

기존 애플리케이션을 업그레이드하는 경우, 시작하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 아직 하지 않으셨다면 먼저 Rails 6.1로 업그레이드하고, Rails 7.0으로 업데이트를 시도하기 전에 애플리케이션이 예상대로 작동하는지 확인해야 합니다. 업그레이드 시 주의해야 할 사항 목록은 Ruby on Rails 업그레이드 가이드에서 확인할 수 있습니다.

2 주요 기능

3 Railties

자세한 변경사항은 Changelog를 참조하세요.

3.1 제거사항

  • dbconsole에서 deprecated된 config를 제거하였습니다.

3.2 기능 폐기(Deprecations)

3.3 주요 변경사항

  • Sprockets는 이제 선택적 의존성입니다

    rails gem은 더 이상 sprockets-rails에 의존하지 않습니다. 애플리케이션에서 여전히 Sprockets를 사용해야 하는 경우, Gemfile에 sprockets-rails를 추가하세요.

    gem "sprockets-rails"
    

4 Action Cable

자세한 변경사항은 Changelog를 참조하세요.

4.1 제거사항

  • 더이상 ActionDispatch::ParamsParser::DEFAULT_PARSERS를 지원하지 않습니다.

  • ActionDispatch::Session::MemCacheStore를 제거했습니다.

  • :method_key HTML 옵션을 form helper에서 제거했습니다.

  • env_config.delete('action_dispatch.show_exceptions')를 제거했습니다.

  • env_config.delete('action_dispatch.show_detailed_exceptions')를 제거했습니다.

  • env_config.delete('action_dispatch.logger')를 제거했습니다.

  • HTTP response message에서 따옴표를 제거했습니다.

  • render :text 옵션을 제거했습니다.

  • render body: string은 더이상 기본 Content-Type으로 text/html을 설정하지 않습니다.

  • public_sendrespond_to?가 없는 모든 상수들은 더 이상 controller helper로 노출되지 않습니다.

  • ActionController::Parameters#* operator를 제거했습니다.

  • config.action_dispatch.ip_spoofing_check 옵션을 제거했습니다.

  • 더 이상 config.action_controller.relative_url_root를 사용하지 않습니다.

  • AbstractController::Helpers::ClassMethods에서 helper method의 블록을 제거했습니다.

4.2 지원 중단(Deprecation) 안내

  • Hash#transform_keys! 사용 시 기존 해시를 변형하면서 변형된 키를 복사하는 방식은 더 이상 사용되지 않습니다.
  • 프로세스당 여러 ActiveRecord::Encryption.primary_key를 지정하는 것은 더 이상 사용되지 않습니다.
  • ActiveRecord::Encryption.key_derivation_salt을 프로세스당 여러 번 지정하는 것은 더 이상 사용되지 않습니다.
  • ActiveRecord::Encryption.deterministic_key를 프로세스당 여러 번 지정하는 것은 더 이상 사용되지 않습니다.
  • config.active_support.use_rfc4122_namespaced_uuids는 더 이상 사용되지 않습니다. Rails 7.1에서는 항상 RFC4122 UUID 네임스페이스를 사용합니다.
  • config.active_support.executor_around_test_case는 더 이상 사용되지 않습니다.
  • 읽기 전용 array나 range에서 in-place 업데이트를 시도하는 것은 더 이상 사용되지 않습니다.
  • ActiveRecord::Base.strict_loading_by_default는 더 이상 사용되지 않습니다.
  • relation.reselect 메서드는 더 이상 사용되지 않습니다. 대신 relation.unscope(:select).select를 사용하세요.
  • relation.regroup 메서드는 더 이상 사용되지 않습니다. 대신 relation.unscope(:group).group을 사용하세요.
  • relation.reorder 메서드는 더 이상 사용되지 않습니다. 대신 relation.unscope(:order).order를 사용하세요.
  • Class#descendantsClass#subclasses를 Rails 프레임워크 외부에서 사용하는 것은 더 이상 사용되지 않습니다.

4.3 주요 변경사항

5 Action Pack

자세한 변경사항은 Changelog를 참조하세요.

5.1 제거 사항

  • 사용이 중단된 ActionDispatch::Response.return_only_media_type_on_content_type 제거.

  • 사용이 중단된 Rails.config.action_dispatch.hosts_response_app 제거.

  • 사용이 중단된 ActionDispatch::SystemTestCase#host! 제거.

  • fixture_path에 대한 상대 경로를 fixture_file_upload에 전달하는 사용 중단된 기능 제거.

5.2 사용 중단(Deprecation)

5.3 주목할 만한 변경점

6 Action View

자세한 변경사항은 Changelog를 참고해주세요.

6.1 제거된 기능들

  • 더이상 사용되지 않는 Rails.config.action_view.raise_on_missing_translations가 제거되었습니다.

6.2 사용 중단(Deprecation)

6.3 주목할만한 변경사항

  • Active Record 객체가 URL을 만드는데 사용되는 경우, button_to는 해당 객체로부터 HTTP verb [method]를 추론합니다

    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" />
    

7 Action Mailer

자세한 변경사항은 Changelog를 참조하세요.

7.1 삭제 항목

  • 더 이상 사용되지 않는 ActionMailer::DeliveryJobActionMailer::Parameterized::DeliveryJobActionMailer::MailDeliveryJob으로 대체되어 삭제되었습니다.

7.2 Deprecations (지원 중단)

Rails 애플리케이션을 업그레이드할 때, 일부 기능이 향후 버전에서 제거될 수 있다는 deprecation warning을 만날 수 있습니다. 이러한 deprecation warning은 컨트롤러에서 template를 렌더링하거나, views를 완전히 처리할 때 출력됩니다.

예를 들어 아래와 같은 deprecation warning이 있습니다:

DEPRECATION WARNING: The :child pseudo class selector has been deprecated and will be removed from Rails 7.0. See https://github.com/rails/rails/issues/45014. (called from _app_views_users_show_html_erb___435538683105387134_147520 at /Users/zzak/src/demo/app/views/users/show.html.erb:1)

현재 프로젝트에서 나타나는 모든 deprecation warning을 확인하려면:

$ DEPRECATION_WARNINGS=1 rails dev:cache

위의 명령을 실행하면 프로젝트의 모든 deprecation warning을 볼 수 있습니다.

7.3 주요 변경사항

8 Active Record

자세한 변경사항은 Changelog를 참조하세요.

8.1 제거된 기능

  • connected_to에서 더 이상 사용되지 않는 database kwarg를 제거했습니다.

  • 더 이상 사용되지 않는 ActiveRecord::Base.allow_unsafe_raw_sql를 제거했습니다.

  • configs_for 메서드에서 더 이상 사용되지 않는 :spec_name 옵션을 제거했습니다.

  • Rails 4.2와 4.1 형식의 YAML로 ActiveRecord::Base 인스턴스를 로드하는 더 이상 사용되지 않는 지원을 제거했습니다.

  • PostgreSQL 데이터베이스에서 :interval 컬럼 사용 시 표시되던 deprecation 경고를 제거했습니다.

    이제 interval 컬럼은 문자열 대신 ActiveSupport::Duration 객체를 반환합니다.

    이전 동작을 유지하려면 모델에 다음 라인을 추가하세요:

    attribute :column, :string
    
  • 연결 사양 이름으로 "primary"를 사용해 연결을 해결하는 더 이상 사용되지 않는 지원을 제거했습니다.

  • ActiveRecord::Base 객체를 인용하는 더 이상 사용되지 않는 지원을 제거했습니다.

  • ActiveRecord::Base 객체를 데이터베이스 값으로 타입 캐스팅하는 더 이상 사용되지 않는 지원을 제거했습니다.

  • type_cast에 컬럼을 전달하는 더 이상 사용되지 않는 지원을 제거했습니다.

  • 더 이상 사용되지 않는 DatabaseConfig#config 메서드를 제거했습니다.

  • 더 이상 사용되지 않는 rake 작업들을 제거했습니다:

    • db:schema:load_if_ruby
    • db:structure:dump
    • db:structure:load
    • db:structure:load_if_sql
    • db:structure:dump:#{name}
    • db:structure:load:#{name}
    • db:test:load_structure
    • db:test:load_structure:#{name}
  • 비결정적 순서를 사용하여 검색하는 Model.reorder(nil).first의 더 이상 사용되지 않는 지원을 제거했습니다.

  • Tasks::DatabaseTasks.schema_up_to_date?에서 더 이상 사용되지 않는 environmentname 인자를 제거했습니다.

  • 더 이상 사용되지 않는 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 제거.

8.2 Deprecations

  • Tasks::DatabaseTasks.schema_file_type이 deprecated 되었습니다.

8.3 주목할만한 변경사항

  • 블록이 예상보다 일찍 종료될 때 트랜잭션을 롤백합니다.

    이전에는 트랜잭션 블록이 일찍 종료되면 트랜잭션이 커밋되었습니다.

    문제는 트랜잭션 블록 내부에서 발생한 타임아웃도 불완전한 트랜잭션을 커밋하게 만들었다는 것입니다. 이러한 실수를 방지하기 위해 트랜잭션 블록은 롤백됩니다.

  • 같은 컬럼에 대한 조건을 병합할 때 더 이상 두 조건을 모두 유지하지 않으며, 일관되게 후자의 조건으로 대체됩니다.

    # Rails 6.1 (IN 절이 병합 측의 equality 조건으로 대체됨)
    Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
    # Rails 6.1 (두 충돌하는 조건이 존재, deprecated)
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
    # Rails 6.1에서 rewhere를 사용하여 Rails 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]
    

9 Active Storage

자세한 변경사항은 Changelog를 참조하세요.

9.1 제거(Removals)

  • The deprecated ActiveRecord::Migration::compatibility setter has been removed. Use ActiveRecord::Migration.[\]() instead. Commit

  • 더 이상 사용되지 않는 ActiveRecord::Migration::compatibility setter가 제거되었습니다. 대신 ActiveRecord::Migration.[\]()를 사용하세요. Commit

  • The deprecated support to passing a column to sum when a block is given has been removed. Commit

  • 블록이 주어진 경우 sum에 column을 전달하는 deprecation된 지원이 제거되었습니다. Commit

  • The deprecated ActiveRecord::ConnectionAdapters::SchemaCache#data_sources method has been removed. Commit

  • deprecation된 ActiveRecord::ConnectionAdapters::SchemaCache#data_sources 메서드가 제거되었습니다. Commit

  • The deprecated support for using unsafe raw SQL in ActiveRecord::Relation methods has been removed. Applications should use the allowed methods for passing custom SQL fragments. Commit

  • ActiveRecord::Relation 메서드에서 안전하지 않은 raw SQL을 사용하는 지원이 deprecation되어 제거되었습니다. 애플리케이션에서는 커스텀 SQL 조각을 전달하기 위해 허용된 메서드를 사용해야 합니다. Commit

9.2 지원 중단 사항

A deprecation removes or modifies code that is no longer idiomatic but is still processed. By default, deprecation warnings are enabled in the development and test environments but disabled in production. You can change this by setting the config.active_support.deprecation for the environment(s):

  • :silence - Disable all deprecation warnings
  • :notify - Send all deprecation warnings to the ActiveSupport::Deprecation.behavior configured handler
  • :stderr - Send all deprecation warnings to STDERR
  • :log - Send all deprecation warnings to the configured logger
  • :raise - Raise an exception on each deprecation

Rails의 지원이 중단되는 것은 더 이상 관용적이지 않지만 여전히 처리되는 코드를 제거하거나 수정하는 것입니다. 기본적으로 지원 중단 경고는 development와 test 환경에서는 활성화되어 있고 production 환경에서는 비활성화되어 있습니다. 각 환경에 대한 config.active_support.deprecation을 설정하여 이를 변경할 수 있습니다:

  • :silence - 모든 지원 중단 경고를 비활성화
  • :notify - 모든 지원 중단 경고를 설정된 ActiveSupport::Deprecation.behavior 핸들러로 전송
  • :stderr - 모든 지원 중단 경고를 STDERR로 전송
  • :log - 모든 지원 중단 경고를 설정된 logger로 전송
  • :raise - 각 지원 중단에 대해 예외를 발생시킴

9.3 주요 변경사항

10 Active Model

자세한 변경사항은 Changelog를 참조하세요.

10.1 제거된 기능들

  • ActiveModel::Errors 인스턴스를 Hash로 열거하는 deprecated된 기능이 제거되었습니다.

  • deprecated된 ActiveModel::Errors#to_h가 제거되었습니다.

  • deprecated된 ActiveModel::Errors#slice!가 제거되었습니다.

  • deprecated된 ActiveModel::Errors#values가 제거되었습니다.

  • deprecated된 ActiveModel::Errors#keys가 제거되었습니다.

  • deprecated된 ActiveModel::Errors#to_xml이 제거되었습니다.

  • ActiveModel::Errors#messages에 에러를 concat하는 deprecated된 지원이 제거되었습니다.

  • ActiveModel::Errors#messages에서 에러를 clear하는 deprecated된 지원이 제거되었습니다.

  • ActiveModel::Errors#messages에서 에러를 delete하는 deprecated된 지원이 제거되었습니다.

  • ActiveModel::Errors#messages에서 []=를 사용하는 deprecated된 지원이 제거되었습니다.

  • Rails 5.x 에러 포맷의 Marshal과 YAML load 지원이 제거되었습니다.

  • Rails 5.x ActiveModel::AttributeSet 포맷의 Marshal load 지원이 제거되었습니다.

10.2 Deprecation(지원 종료)

일반적으로 Rails는 즉각적인 업그레이드가 가능하도록 하기 위해, 애플리케이션에 지장을 주지 않는 방식으로 기능을 deprecate합니다. 설정이나 코드에 있는 deprecated된 호출이 있다면 알림이 표시되어, 새로운 방식으로 업데이트 할 수 있도록 합니다.

Deprecation 경고는 보통 다음 버전에서 해당 기능이 제거될 것임을 의미합니다. 예를 들어, Rails 7.0에서 deprecation 경고를 보게 된다면, 이는 Rails 7.1에서 해당 기능이 제거될 것임을 의미합니다.

Rails 7.1로 업그레이드하기 전에 Rails 7.0 애플리케이션에서 모든 deprecation 경고가 해결되었는지 확인해야 합니다.

config/environments/development.rbconfig/environments/test.rb에서 deprecation 경고를 활성화할 수 있습니다:

config.active_support.deprecation = :stderr

production 환경에서는 :log로 설정하여 로그 파일에 deprecation 경고를 출력할 수 있습니다:

config.active_support.deprecation = :log

10.3 주목할 만한 변경사항

11 Active Support

자세한 변경사항은 Changelog를 참조하세요.

11.1 제거된 항목들

  • 더 이상 사용되지 않는 config.active_support.use_sha1_digests가 제거되었습니다.

  • 더 이상 사용되지 않는 URI.parser가 제거되었습니다.

  • datetime 범위에서 값의 포함 여부를 확인하기 위해 Range#include?를 사용하는 더 이상 사용되지 않는 지원이 제거되었습니다.

  • 더 이상 사용되지 않는 ActiveSupport::Multibyte::Unicode.default_normalization_form이 제거되었습니다.

11.2 Deprecations

  • Array, Range, Date, DateTime, Time, BigDecimal, Float, Integer에서 #to_fs를 대신 사용하도록 #to_s에 포맷을 전달하는 것을 Deprecate합니다.

    이 Deprecation은 Rails 애플리케이션이 특정 타입의 객체 보간을 더 빠르게 만드는 Ruby 3.1의 최적화를 활용할 수 있도록 하기 위한 것입니다.

    새로운 애플리케이션에서는 해당 클래스들에서 #to_s 메서드가 오버라이드되지 않을 것이며, 기존 애플리케이션은 config.active_support.disable_to_s_conversion을 사용할 수 있습니다.

11.3 주요 변경사항

12 Active Job

자세한 변경사항은 Changelog를 참조하세요.

12.1 제거된 기능

  • 이전 콜백이 throw :abort로 중단되었을 때 after_enqueue/after_perform 콜백을 중단하지 않던 deprecated된 동작이 제거되었습니다.

  • deprecated된 :return_false_on_aborted_enqueue 옵션이 제거되었습니다.

12.2 Deprecations

  • Rails.config.active_job.skip_after_callbacks_if_terminated가 deprecated 되었습니다.

12.3 주요 변경사항

13 Action Text

자세한 변경사항은 Changelog를 참조하세요.

13.1 삭제

13.2 더 이상 사용되지 않는 기능들

  • ActiveRecord::Base#update_attributes 메서드와 ActiveRecord::Base#update_attributes! 메서드는 더 이상 사용되지 않으며, ActiveRecord::Base#updateActiveRecord::Base#update!로 각각 대체되었습니다.

  • config.force_ssl를 통해 cookie의 secure flag를 비활성화하는 것은 더 이상 사용되지 않습니다. 대신 Rails.application.config.ssl_options를 사용하세요.

  • Ruby 2.3을 위한 지원이 더 이상 사용되지 않습니다.

  • Internet Explorer에 대한 ActionDispatch::Response#content_type의 특별한 처리가 더 이상 사용되지 않습니다.

  • Kernel#private_key가 더 이상 사용되지 않으며, OpenSSL::PKey::RSA.new를 사용하세요.

  • 같은 의미의 config.action_dispatch.tld_length가 더 이상 사용되지 않으며, config.action_dispatch.hosts_response_app이나 config.hosts를 사용하세요.

  • ActionDispatch::IntegrationTest#host!ActionController::TestCase#host!가 더 이상 사용되지 않으며, 대신 @request.host=를 사용하세요.

13.3 주목할만한 변경사항

14 Action Mailbox

자세한 변경사항은 Changelog를 참조하세요.

14.1 Removals

  • 폐기 예정이었던 Rails.application.credentials.action_mailbox.mailgun_api_key가 제거되었습니다.

  • 폐기 예정이었던 환경 변수 MAILGUN_INGRESS_API_KEY가 제거되었습니다.

14.2 지원 중단

https://guides.rubyonrails.org/7_1_release_notes.html를 참조하여 Rails 7.1에서 지원이 중단된 기능의 전체 목록을 확인하세요.

14.3 주요 변경사항

15 Ruby on Rails 가이드

자세한 변경사항은 Changelog를 참조하세요.

15.1 주목할 만한 변경사항

16 크레딧

안정적이고 견고한 프레임워크인 Rails를 만들기 위해 많은 시간을 투자한 수많은 사람들은 Rails 기여자 전체 목록에서 확인할 수 있습니다. 모든 기여자분들께 큰 찬사를 보냅니다.



맨 위로