rubyonrails.org에서 더 보기:

GitHub에서 이 파일을 읽지 마세요. 가이드는 https://guides.rubyonrails.org 에 게시되어 있습니다.

Ruby on Rails 7.2 릴리스 노트

Rails 7.2의 주요 특징:

  • 애플리케이션을 위한 Development containers 설정
  • browser version guard를 기본으로 추가
  • Ruby 3.1을 새로운 최소 버전으로 지정
  • 기본 Progressive Web Application (PWA) 파일
  • omakase RuboCop 규칙을 기본으로 추가
  • 새로운 애플리케이션에 GitHub CI workflow를 기본으로 추가
  • 새로운 애플리케이션에 Brakeman을 기본으로 추가
  • Puma thread count에 대한 새로운 기본값 설정
  • 트랜잭션 내에서 job이 스케줄링되는 것을 방지
  • 트랜잭션별 commit과 rollback 콜백
  • Ruby 3.3+ 실행 시 YJIT을 기본으로 활성화
  • Rails 가이드의 새로운 디자인
  • 메모리 할당 최적화를 위해 기본 Dockerfile에 jemalloc 설정
  • bin/setup에 puma-dev 설정 제안

이 릴리스 노트는 주요 변경사항만을 다룹니다. 다양한 버그 수정과 변경사항에 대해 알아보려면 changelog를 참조하거나 GitHub의 메인 Rails 저장소에 있는 커밋 목록을 확인하세요.

1 Rails 7.2로 업그레이드하기

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

2 주요 기능

2.1 애플리케이션을 위한 Development container 설정

Development container(또는 줄여서 dev container)를 사용하면 컨테이너를 완전한 기능을 갖춘 개발 환경으로 사용할 수 있습니다.

Rails 7.2에서는 애플리케이션을 위한 development container 설정을 생성하는 기능이 추가되었습니다. 이 설정에는 Dockerfile, docker-compose.yml 파일, 그리고 devcontainer.json 파일이 포함된 .devcontainer 폴더가 포함됩니다.

기본적으로 dev container에는 다음이 포함됩니다:

  • Kredis, Action Cable 등에서 사용할 Redis 컨테이너
  • 데이터베이스(SQLite, Postgres, MySQL 또는 MariaDB)
  • 시스템 테스트를 위한 Headless Chrome 컨테이너
  • 로컬 디스크를 사용하도록 설정되고 미리보기 기능이 작동하는 Active Storage

development container가 포함된 새로운 애플리케이션을 생성하려면 다음을 실행하면 됩니다:

$ rails new myapp --devcontainer

DevContainer

DevContainer는 코드 실행을 위한 완전한 개발 환경을 제공하는 Docker container입니다.

Rails 7.1부터 새로운 application을 DevContainer 설정과 함께 생성할 수 있습니다:

$ rails new myapp --devcontainer

이는 프로젝트에서 development container를 사용하기 위한 필수 파일들을 생성할 것입니다: - .devcontainer/devcontainer.json - Development container 설정 - .devcontainer/Dockerfile - 사용자 정의 Dockerfile - compose.yaml - Docker Compose 구성

3 다음은 무엇인가요?

이제 DevContainer를 지원하는 code editor(예: VS Code)를 사용하여 프로젝트를 열고 container에서 개발을 시작할 수 있습니다.

container를 처음 시작할 때, 이는 다음과 같은 작업을 수행할 것입니다: - Ruby, Node와 PostgreSQL을 설치합니다 - database를 생성하고 migration을 실행합니다 - JavaScript 및 CSS dependencies를 설치합니다 - development server를 시작합니다

이 모든 것이 단일 container에서 이루어집니다 - 별도의 설정이 필요 없습니다!

기존 애플리케이션의 경우, devcontainer 명령어를 사용할 수 있습니다:

$ rails devcontainer

(rails devcontainer 명령어는 그대로 유지됩니다)

자세한 내용은 Dev Containers 시작하기 가이드를 참조하세요.

3.1 기본적으로 브라우저 버전 제한 기능 추가

Rails는 이제 모든 액션(또는 only:, except:로 제한된 일부)에 접근할 수 있는 브라우저 버전을 지정할 수 있는 기능을 추가했습니다.

versions:에 전달된 해시나 명명된 세트에서 매칭되는 브라우저만 지정된 버전보다 낮을 경우 차단됩니다.

이는 다른 모든 알 수 없는 브라우저와 user-agent 헤더를 보고하지 않는 에이전트는 접근이 허용된다는 것을 의미합니다.

차단된 브라우저는 기본적으로 HTTP 상태 코드 "406 Not Acceptable"과 함께 public/406-unsupported-browser.html 파일을 응답받게 됩니다.

예시:

class ApplicationController < ActionController::Base
  # webp 이미지, web push, badges, import maps, CSS nesting + :has를 네이티브하게 지원하는 브라우저만 허용
  allow_browser versions: :modern
end

class ApplicationController < ActionController::Base
  # Chrome과 Opera의 모든 버전은 허용되지만 "internet explorer"(ie)의 모든 버전은 허용되지 않습니다. Safari는 16.4+ 이상, Firefox는 121+ 이상이어야 합니다.
  allow_browser versions: { safari: 16.4, firefox: 121, ie: false }
end

class MessagesController < ApplicationController
  # ApplicationController에서 차단된 브라우저 외에도 show 액션에 대해 Opera 104 미만과 Chrome 119 미만을 차단합니다.
  allow_browser versions: { opera: 104, chrome: 119 }, only: :show
end

새로 생성된 애플리케이션은 이 가드가 ApplicationController에 설정되어 있습니다.

자세한 내용은 allow_browser 문서를 참조하세요.

3.2 Ruby 3.1을 새로운 최소 버전으로 설정

지금까지 Rails는 메이저 버전에서만 이전 Ruby 버전과의 호환성을 중단했습니다. 우리는 이 정책을 변경하고 있습니다. 이는 오래된 지원이 끝난 Ruby 버전과의 호환성을 유지하거나 Rails 메이저 버전을 더 자주 올려야 하고, 메이저 버전을 올릴 때 여러 Ruby 버전을 한꺼번에 중단해야 하기 때문입니다.

이제 릴리스 시점에 지원이 종료된 Ruby 버전들은 Rails 마이너 버전에서도 지원을 중단할 것입니다.

Rails 7.2에서는 Ruby 3.1이 새로운 최소 버전이 됩니다.

3.3 기본 Progressive Web Application (PWA) 파일

Rails로 PWA 애플리케이션 제작을 더 잘 지원하기 위한 준비의 일환으로, manifest와 service worker를 위한 기본 PWA 파일들을 생성하게 되었습니다. 이 파일들은 app/views/pwa에서 제공되며 ERB를 통해 동적으로 렌더링될 수 있습니다. 이 파일들은 생성된 routes 파일에서 기본 route로 root에 명시적으로 마운트됩니다.

자세한 내용은 이 기능을 추가한 pull request를 참조하세요.

3.4 기본적으로 omakase RuboCop 규칙 추가

이제 Rails 애플리케이션에는 RuboCop이 기본적으로 rubocop-rails-omakase의 규칙들로 구성되어 제공됩니다.

Ruby는 다양한 방언을 허용할 뿐만 아니라 그 다양성을 환영하는 아름답게 표현력이 풍부한 언어입니다. 모든 라이브러리, 프레임워크, 애플리케이션에서 단일 스타일로만 작성되도록 의도된 언어가 아니었습니다. 만약 여러분이나 여러분의 팀이 즐거움을 주는 특별한 자체 스타일을 개발했다면, 그것을 소중히 여겨야 합니다.

이 RuboCop 스타일 모음은 아직 특정 방언에 전념하지 않은 사람들을 위한 것입니다. 합리적인 시작점을 원하고, Ruby 스타일링에 대한 일관된 접근 방식을 시작하기 위한 기본 규칙의 혜택을 받고자 하는 사람들을 위한 것입니다.

이러한 특정 규칙들은 옳거나 그른 것이 아니라, 단지 Rails 창시자의 독특한 미적 감각을 나타낼 뿐입니다. 전체를 사용하든, 시작점으로 사용하든, 영감으로 사용하든, 여러분이 적합하다고 생각하는 방식으로 사용하시면 됩니다.

3.5 새로운 애플리케이션에 기본적으로 GitHub CI workflow 추가

Rails는 이제 새로운 애플리케이션에 기본 GitHub CI workflow 파일을 추가합니다. 이는 특히 newcomer들이 자동화된 scanning, linting, testing과 함께 좋은 시작을 할 수 있도록 도와줄 것입니다. 이는 우리가 처음부터 unit test와 함께 해온 것의 현대적인 연장선이라고 볼 수 있습니다.

물론 GitHub Actions는 무료 토큰을 모두 사용한 후에는 private repository에 대해서는 상업용 클라우드 제품이 됩니다. 하지만 GitHub와 Rails의 관계, newcomer들에게 압도적인 기본 플랫폼이라는 점, 그리고 newcomer들에게 좋은 CI 습관을 가르치는 것의 가치를 고려할 때, 이는 수용 가능한 절충안이라고 생각합니다.

3.6 새로운 애플리케이션에 기본적으로 Brakeman 추가

Brakeman은 Rails의 일반적인 보안 취약점이 production 환경에 들어가는 것을 방지하는 훌륭한 방법입니다.

새로운 애플리케이션에는 Brakeman이 설치되어 있으며, GitHub CI workflow와 함께 사용하면 모든 push마다 자동으로 실행됩니다.

3.7 Puma 쓰레드 수의 새로운 기본값 설정

Rails는 Puma의 기본 쓰레드 수를 5개에서 3개로 변경했습니다.

잘 최적화된 Rails 애플리케이션의 특성상, 빠른 SQL 쿼리와 job을 통해 실행되는 느린 3rd-party 호출로 인해, 쓰레드 수가 너무 많을 경우 Ruby는 Global VM Lock (GVL)이 해제되기를 기다리는 데 상당한 시간을 소비할 수 있으며, 이는 대기 시간(요청 응답 시간)에 악영향을 미칩니다.

신중한 검토와 조사, 그리고 프로덕션 환경에서 실행되는 애플리케이션들의 실전 경험을 바탕으로, 3개의 쓰레드가 동시성과 성능 사이의 좋은 균형점이라고 판단하여 이를 기본값으로 결정했습니다.

이 변경사항에 대한 자세한 논의는 해당 이슈에서 확인할 수 있습니다.

3.8 트랜잭션 내에서의 job 스케줄링 방지하기

Active Job에서 흔히 발생하는 실수는 트랜잭션 내부에서 job을 enqueue하는 것입니다. 이로 인해 다른 프로세스가 트랜잭션이 커밋되기 전에 job을 pick하고 실행할 수 있어 다양한 오류가 발생할 수 있습니다.

Topic.transaction do
  topic = Topic.create

  NewTopicNotificationJob.perform_later(topic)
end

Transaction 내에서 생성한 record들을 참조하는 background job을 실행하는 경우, job이 실행되기 전에 transaction이 commit 되었는지 확인해야 합니다.

이제 Active Job은 트랜잭션이 커밋된 후로 자동으로 enqueuing을 지연시키며, 트랜잭션이 롤백되면 job을 취소합니다.

다양한 queue 구현체들은 이 동작을 비활성화하도록 선택할 수 있으며, 사용자는 job 단위로 이를 비활성화하거나 강제할 수 있습니다:

class NewTopicNotificationJob < ApplicationJob
  self.enqueue_after_transaction_commit = :never # transaction 커밋 후 작업을 대기열에 넣지 않음
end

3.9 트랜잭션별 commit과 rollback 콜백

레코드 외부에서 트랜잭션 콜백을 등록할 수 있는 새로운 기능 덕분에 이제 이것이 가능해졌습니다.

ActiveRecord::Base.transaction은 이제 콜백을 등록할 수 있는 ActiveRecord::Transaction 객체를 yield합니다.

Article.transaction do |transaction|
  article.update(published: true)

  transaction.after_commit do
    PublishNotificationMailer.with(article: article).deliver_later
  end
end

transaction 내에서 메일을 보내려면 after_commit 콜백을 사용합니다. 이렇게 하면 해당 transaction이 실제로 커밋된 후에만 메일이 전송됩니다.

ActiveRecord::Base.current_transaction이 추가되어 현재 transaction에 콜백을 등록할 수 있게 되었습니다.

Article.current_transaction.after_commit do
  PublishNotificationMailer.with(article: article).deliver_later
end

현재 transaction이 commit 된 후에 코드 블록을 실행합니다. 하나의 프로세스에서는 하나의 database transaction만 가능하므로, 중첩된 transaction을 호출하는 경우 가장 바깥쪽 transaction이 commit 될 때 블록이 실행됩니다.

마지막으로, transaction 내부 또는 외부에서 실행될 수 있고 상태 변경이 제대로 persist된 후에 작업을 수행해야 하는 코드를 위해 ActiveRecord.after_all_transactions_commit이 추가되었습니다.

def publish_article(article)
  article.update(published: true)

  ActiveRecord.after_all_transactions_commit do
    PublishNotificationMailer.with(article: article).deliver_later
  end
end

이 코드는 위험한 상황에서도 안전합니다. 이메일 발송은 모든 데이터베이스 transaction이 commit 된 후에만 enqueue됩니다. 만약 이후에 다른 트랜잭션이 롤백되더라도 이미 enqueue된 이메일은 영향을 받지 않습니다.

자세한 내용은 #51474#51426를 참조하세요:

3.10 Ruby 3.3 이상에서 YJIT을 기본적으로 활성화

YJIT은 Ruby 3.1부터 CRuby에서 사용할 수 있는 Ruby의 JIT 컴파일러입니다. Rails 애플리케이션의 성능을 크게 향상시킬 수 있으며, 15-25%의 지연 시간 개선을 제공합니다.

Rails 7.2에서는 Ruby 3.3 이상을 실행하는 경우 YJIT이 기본적으로 활성화됩니다.

다음과 같이 설정하여 YJIT을 비활성화할 수 있습니다:

Rails.application.config.yjit = false

YJIT을 전역적으로 비활성화합니다.

3.11 Rails 가이드의 새로운 디자인

2021년 12월에 출시된 Rails 7.0은 새로운 홈페이지와 부트 스크린을 포함했습니다. 하지만 가이드의 디자인은 2009년 이후로 거의 변경되지 않았습니다 - 이 점은 간과되지 않았습니다 (여러분의 피드백을 들었습니다).

현재 Rails 프레임워크의 복잡성을 제거하고 문서를 일관되고 명확하며 최신 상태로 유지하는 작업이 진행되고 있는 가운데, 가이드의 디자인을 개선하여 동일하게 현대적이고 단순하며 신선하게 만들 때가 되었습니다.

UX 디자이너 John Athayde와 협력하여 홈페이지의 룩앤필을 Rails 가이드에 적용함으로써 깔끔하고 세련되며 최신의 모습으로 만들었습니다.

레이아웃은 그대로 유지되지만, 오늘부터 가이드에서 다음과 같은 변경 사항을 확인하실 수 있습니다:

  • 더 깔끔하고 덜 복잡한 디자인
  • 홈페이지와 더 일관된 폰트, 색상 구성, 로고
  • 업데이트된 아이콘
  • 단순화된 내비게이션
  • 스크롤 시 고정되는 "Chapters" 내비게이션 바

비교 이미지가 포함된 공지 블로그 포스트를 확인해보세요.

3.12 Dockerfile의 기본 설정에서 메모리 할당을 최적화하기 위한 jemalloc 설정

Puma와 같이 여러 thread를 사용할 때, Ruby의 malloc 사용은 메모리 단편화 문제를 일으킬 수 있습니다. 단편화를 피하기 위해 다른 패턴을 사용하는 allocator로 전환하면 메모리 사용량을 상당한 수준으로 줄일 수 있습니다.

Rails 7.2는 이제 메모리 할당을 최적화하기 위해 기본 Dockerfile에 jemalloc을 포함하고 있습니다.

3.13 bin/setup에서 puma-dev 설정 제안

Puma-dev는 Docker를 사용하지 않을 경우, 여러 Rails 애플리케이션을 로컬에서 개발하기 위한 최선의 방법입니다.

Rails는 이제 bin/setup에서 새로운 주석을 통해 이 설정 방법을 제안합니다.

4 Railties

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

4.1 제거된 항목들

  • 지원 종료된 Rails::Generators::Testing::Behaviour 제거.

  • 지원 종료된 Rails.application.secrets 제거.

  • 지원 종료된 Rails.config.enable_dependency_loading 제거.

  • 지원 종료된 find_cmd_and_exec console helper 제거.

  • oracle, sqlserver, JRuby 관련 database adapter에 대한 지원을 newdb:system:change rails 명령어에서 제거.

  • generator들에서 config.public_file_server.enabled 옵션 제거.

4.2 지원 중단

4.3 주목할 만한 변경사항

  • 신규 애플리케이션과 플러그인에서 rubocop-rails-omakase의 규칙을 적용한 RuboCop을 기본적으로 추가.

  • 신규 애플리케이션에서 보안 검사를 위한 기본 설정의 Brakeman을 추가.

  • 신규 애플리케이션과 플러그인에서 Dependabot, Brakeman, RuboCop 및 테스트 실행을 위한 GitHub CI 파일들을 기본적으로 추가.

  • Ruby 3.3+ 에서 실행되는 신규 애플리케이션에서 YJIT가 기본적으로 활성화됨.

  • Visual Studio Code에서 컨테이너로 애플리케이션을 실행하기 위한 .devcontainer 폴더 생성.

    $ rails new myapp --devcontainer
    
  • initializer를 테스트하기 위한 Rails::Generators::Testing::Assertions#assert_initializer 도입.

  • 신규 애플리케이션에서 시스템 테스트가 기본적으로 Headless Chrome을 사용.

  • 일반 서버 실행 시 backtrace 정리를 끄기 위한 BACKTRACE 환경 변수 지원. 이전에는 테스트에서만 사용 가능했음.

  • manifest와 service worker를 위한 기본 Progressive Web App (PWA) 파일들을 app/views/pwa에서 제공하고, ERB를 통해 동적으로 렌더링 가능하도록 함.

5 Action Cable

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

5.1 제거된 기능들

  • MIPS 32-bit Systems(mips) support has been removed. (Pull Request)

  • Rails.application.config.action_view.raise_on_missing_translations = true has been removed in favor of config.i18n.raise_on_missing_translations = true. (Pull Request)

  • Remove deprecated ActiveSupport::TimeWithZone.name and ActiveSupport::TimeWithZone.silence_redefinition_of_method. (Pull Request)

  • Remove deprecated support to use Enumerator::Lazy instead of ActiveSupport::LazyLoadHooks. (Pull Request)

  • Remove deprecated ability to pass a path to ActiveStorage::Blob#download. (Pull Request)

  • Remove deprecated config.action_dispatch.return_only_request_media_type_on_content_type. (Pull Request)

  • Remove deprecated config.active_support.use_marshal_serialization. (Pull Request)

  • Remove deprecated ArgumentError with :as option in ActiveRecord::Base.to_param. (Pull Request)

  • Remove deprecated config.active_storage.replace_on_assign_to_many. (Pull Request)

  • Remove deprecated behavior that would return an instance of ActiveSupport::StringInquirer from Rails.env when Rails.env.local? was previously called. (Pull Request)

  • Remove deprecated ability to assign non-string values to ActiveStorage::Blob#content_type. (Pull Request)

  • Remove deprecated #to_s override in ActiveRecord::Relation. (Pull Request)

  • Remove deprecated behavior of ActiveSupport::TimeWithZone#to_s with no argument. (Pull Request)

  • Remove deprecated instance method clean_up from ActiveStorage::Blob. (Pull Request)

  • Remove support for allowing changeable attributes to be overridden by default attribute definitions. (Pull Request)

  • Remove deprecated behavior from ActionView::Helpers::NumberHelper#number_to_human_size when given unrecognized options. (Pull Request)

  • Remove deprecated ActiveModel::Name#singular_route_key and ActiveModel::Name#route_key. (Pull Request)

  • Remove deprecated instance method purge from ActiveStorage::Attachment. (Pull Request)

  • Remove deprecated instance method purge_later from ActiveStorage::Attachment. (Pull Request)

  • Remove deprecated instance method purge from ActiveStorage::Blob. (Pull Request)

  • Remove deprecated instance method purge_later from ActiveStorage::Blob. (Pull Request)

  • Remove deprecated option database from rails dbconsole. (Pull Request)

  • Remove deprecated support for using unsafe legacy routing. (Pull Request)

  • Remove deprecated class method configurations from ActiveRecord::Base. (Pull Request)

  • Remove deprecated method ActiveRecord::Base.remove_connection. (Pull Request)

  • Remove deprecated support for passing a column to type_cast. (Pull Request)

  • Remove deprecated ability to observe load hooks. (Pull Request)

  • Remove deprecated instance method composed_of_embeds_many? and composed_of_embeds_one? from ActiveModel::Reflection. (Pull Request)

  • Remove deprecated class method clear_all_connections! from ActiveRecord::Base. (Pull Request)

  • Remove deprecated class method bootstrap_ar_deprecated from ActiveRecord::LogSubscriber. (Pull Request)

  • Remove deprecated behavior of not rasing if calling Rails.application before initialization. (Pull Request)

  • Remove deprecated ability to register observers with strings/symbols. (Pull Request)

  • Remove deprecated support for using Rails.application.config.credentials without a key. (Pull Request)

  • Remove deprecated behavior of ActiveSupport::Callbacks#halted_callback_hook without a callback argument. (Pull Request)

  • Remove deprecated behavior of returning strings from case equality method === in ActiveSupport::Duration. (Pull Request)

  • Remove deprecated class method ActiveRecord::Base.establish_connection. (Pull Request)

  • Remove deprecated ability to assign a symbol to config.cache_store. (Pull Request)

  • Remove deprecated behavior of adding newlines by TAG logger formatter. (Pull Request)

  • Remove deprecated behavior of HashWithIndifferentAccess subclasses handling non-hash constructor args. (Pull Request)

  • Remove deprecated support for using Relation#annotate with a hash. (Pull Request)

  • Remove deprecated class method establish_connection from ActiveRecord::Base. (Pull Request)

  • Remove deprecated constant ActiveStorage::BaseController::CONTENT_TYPE_WHITELIST. (Pull Request)

  • Remove deprecated instance method validate_blacklist_content_types from ActiveStorage::Blob. (Pull Request)

  • Remove deprecated instance method validate_whitelist_content_types from ActiveStorage::Blob. (Pull Request)

  • Remove deprecated instance method blacklist_content_types from ActiveStorage::Blob. (Pull Request)

  • Remove deprecated instance method whitelist_content_types from ActiveStorage::Blob. (Pull Request)

  • Remove deprecated constant ActiveStorage::FileNotFoundError. ([Pull

5.2 Deprecations (지원 중단)

  • config.active_record.allow_deprecated_singular_associations_name is deprecated and will be removed in Rails 7.2. Read the deprecation warning and follow the instructions to enable the new behavior.

  • The UNSUPPORTED_FEATURES and MINIMUM_SUPPORTED_VERSIONS constants in Gem::Version have been deprecated, Kernel#timeout and its alias Kernel#timeout= have been deprecated, and OpenSSL::Cipher#key= and OpenSSL#iv= have been deprecated in the version of Ruby that will be required by Ruby on Rails 7.2. Applications that use these features should update their code to prepare for the newer version of Ruby.

5.3 주목할 만한 변경사항

6 Action Pack

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

6.1 삭제 항목

  • 더 이상 사용되지 않는 상수 ActionDispatch::IllegalStateError가 삭제되었습니다.

  • 더 이상 사용되지 않는 상수 AbstractController::Helpers::MissingHelperError가 삭제되었습니다.

  • 더 이상 사용되지 않는 ActionController::ParametersHash 간의 비교가 삭제되었습니다.

  • 더 이상 사용되지 않는 Rails.application.config.action_dispatch.return_only_request_media_type_on_content_type가 삭제되었습니다.

  • 더 이상 사용되지 않는 speaker, vibrate, 그리고 vr permissions policy directives가 삭제되었습니다.

  • Rails.application.config.action_dispatch.show_exceptionstruefalse로 설정하는 더 이상 사용되지 않는 지원이 삭제되었습니다.

6.2 Deprecations

  • Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality 설정이 Deprecate 되었습니다.

6.3 주목할만한 변경사항

7 Action View

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

7.1 제거사항

  • Turbo를 선호하여 deprecated된 @rails/ujs를 제거합니다.

7.2 Deprecations

  • tag.br과 같은 void 엘리먼트 태그 빌더를 사용할 때 콘텐츠를 전달하는 것이 deprecated 되었습니다.

7.3 주목할 만한 변경사항

8 Action Mailer

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

8.1 제거사항

  • 더 이상 사용되지 않는 config.action_mailer.preview_path를 제거했습니다.

  • assert_enqueued_email_with에서 :args를 통한 더 이상 사용되지 않는 params를 제거했습니다.

8.2 Deprecations (지원 종료 예정)

  • Ruby on Rails의 코드를 사용하여 ActiveRecord::Migration을 상속하는 것은 지원 종료(deprecated) 예정입니다. 새로운 시간대 인식 마이그레이션 클래스 중 하나를 사용하세요. (Pull Request)

  • 활성화된 데이터베이스 열거자에 대해 암시적으로 integer 값을 매핑하는 것은 지원 종료(deprecated) 예정입니다. 대신 명시적으로 정수를 할당하세요. (Pull Request)

  • Rails.application.config.action_view.path_names을 통해 특별한 route name들을 정의하는 것은 지원 종료(deprecated) 예정입니다. 대신 path_names route 옵션을 사용하세요. (Pull Request)

  • Rails.application.config.action_dispatch.rescue_responsesrescue_responses 인스턴스 메소드는 지원 종료(deprecated) 예정입니다. 대신 rescue_from을 사용하세요. (Pull Request)

  • DatabaseConfigurations#fetch는 지원 종료(deprecated) 예정입니다. 대신 configs_for를 사용하세요. (Pull Request)

  • DatabaseConfigurations#to_h는 지원 종료(deprecated) 예정이며 Ruby 7.1에서 삭제될 예정입니다. 대신 configuration hash를 직접 사용하세요. (Pull Request)

8.3 주목할 만한 변화들

9 Active Record

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

9.1 제거된 기능

  • deprecated된 Rails.application.config.active_record.suppress_multiple_database_warning 제거.

  • deprecated된 존재하지 않는 attribute 이름으로 alias_attribute를 호출하는 기능 제거.

  • deprecated된 ActiveRecord::Base.remove_connectionname 인자 제거.

  • deprecated된 ActiveRecord::Base.clear_active_connections! 제거.

  • deprecated된 ActiveRecord::Base.clear_reloadable_connections! 제거.

  • deprecated된 ActiveRecord::Base.clear_all_connections! 제거.

  • deprecated된 ActiveRecord::Base.flush_idle_connections! 제거.

  • deprecated된 ActiveRecord::ActiveJobRequiredError 제거.

  • deprecated된 connection adapter에서 2개의 인자로 explain을 정의하는 기능 제거.

  • deprecated된 ActiveRecord::LogSubscriber.runtime 메서드 제거.

  • deprecated된 ActiveRecord::LogSubscriber.runtime= 메서드 제거.

  • deprecated된 ActiveRecord::LogSubscriber.reset_runtime 메서드 제거.

  • deprecated된 ActiveRecord::Migration.check_pending 메서드 제거.

  • deprecated된 SchemaMigrationInternalMetadata 클래스를 ActiveRecord::MigrationContext에 인자로 전달하는 기능 제거.

  • deprecated된 복수형 이름으로 단수형 association을 참조하는 기능 제거.

  • deprecated된 TestFixtures.fixture_path 제거.

  • deprecated된 ActiveRecord::Base#read_attribute(:id)가 커스텀 primary key 값을 반환하는 기능 제거.

  • deprecated된 coder와 class를 serialize의 두 번째 인자로 전달하는 기능 제거.

  • deprecated된 database adapter의 #all_foreign_keys_valid? 제거.

  • deprecated된 ActiveRecord::ConnectionAdapters::SchemaCache.load_from 제거.

  • deprecated된 ActiveRecord::ConnectionAdapters::SchemaCache#data_sources 제거.

  • deprecated된 #all_connection_pools 제거.

  • deprecated된 role 인자가 제공되지 않았을 때 현재 role의 connection pool에 #connection_pool_list, #active_connections?, #clear_active_connections!, #clear_reloadable_connections!, #clear_all_connections!, #flush_idle_connections!를 적용하는 기능 제거.

  • 사용 중단된 ActiveRecord::ConnectionAdapters::ConnectionPool#connection_klass 제거.

  • 사용 중단된 #quote_bound_value 제거.

  • 사용 중단된 ActiveSupport::Duration 인용 지원 제거.

  • 사용 중단된 add_foreign_keydeferrable: true 전달 지원 제거.

  • 사용 중단된 ActiveRecord::Relation#mergerewhere 전달 지원 제거.

  • return, break 또는 throw를 사용하여 종료할 때 transaction 블록을 롤백하는 사용 중단된 동작 제거.

9.2 Deprecations

  • Rails.application.config.active_record.allow_deprecated_singular_associations_name 사용이 중단될 예정입니다

  • Rails.application.config.active_record.commit_transaction_on_non_local_return 사용이 중단될 예정입니다

9.3 주목할 만한 변경사항

10 Active Storage

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

10.1 Removals

  • 더 이상 사용되지 않는 config.active_storage.replace_on_assign_to_many 제거됨.

  • 더 이상 사용되지 않는 config.active_storage.silence_invalid_content_types_warning 제거됨.

10.2 Deprecations(지원 중단)

Passing query values via interpolation to the where method is deprecated.

# deprecated
Book.where("author_id = %{author_id} AND created_at = %{created_at}" % {
  author_id: author_id, created_at: created_at
})

# instead use
Book.where("author_id = :author_id AND created_at = :created_at",
  author_id: author_id, created_at: created_at)

문자열 포맷팅을 통해 where 메소드에 쿼리 값을 전달하는 방식은 지원이 중단될 예정입니다.

10.3 주목할만한 변경사항

11 Active Model

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

11.1 제거

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

11.3 주목할 만한 변경사항

12 Active Support

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

12.1 제거 사항

  • 더 이상 사용되지 않는 ActiveSupport::Notifications::Event#childrenActiveSupport::Notifications::Event#parent_of?를 제거했습니다.

  • 다음 메서드들을 deprecator를 전달하지 않고 호출하는 더 이상 사용되지 않는 지원을 제거했습니다:

    • deprecate
    • deprecate_constant
    • ActiveSupport::Deprecation::DeprecatedObjectProxy.new
    • ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new
    • ActiveSupport::Deprecation::DeprecatedConstantProxy.new
    • assert_deprecated
    • assert_not_deprecated
    • collect_deprecations
  • 더 이상 사용되지 않는 ActiveSupport::Deprecation 인스턴스로의 위임을 제거했습니다.

  • 더 이상 사용되지 않는 SafeBuffer#clone_empty를 제거했습니다.

  • Array, Date, DateTime, Time에서 더 이상 사용되지 않는 #to_default_s를 제거했습니다.

  • 캐시 저장소의 더 이상 사용되지 않는 :pool_size:pool_timeout 옵션을 제거했습니다.

  • config.active_support.cache_format_version = 6.1에 대한 더 이상 사용되지 않는 지원을 제거했습니다.

  • 더 이상 사용되지 않는 상수 ActiveSupport::LogSubscriber::CLEARActiveSupport::LogSubscriber::BOLD를 제거했습니다.

  • ActiveSupport::LogSubscriber#color에서 위치 기반 boolean으로 로그 텍스트를 볼드체로 만드는 더 이상 사용되지 않는 지원을 제거했습니다.

  • 더 이상 사용되지 않는 config.active_support.disable_to_s_conversion을 제거했습니다.

  • 더 이상 사용되지 않는 config.active_support.remove_deprecated_time_with_zone_name을 제거했습니다.

  • 더 이상 사용되지 않는 config.active_support.use_rfc4122_namespaced_uuids를 제거했습니다.

  • MemCacheStoreDalli::Client 인스턴스를 전달하는 더 이상 사용되지 않는 지원을 제거했습니다.

12.2 지원 종료(Deprecations)

12.3 주요 변경사항

13 Active Job

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

13.1 삭제된 항목

  • 더 이상 사용되지 않는 BigDecimal 인자를 위한 primitive serializer가 제거되었습니다.

  • scheduled_at 속성에 숫자값을 설정하는 더 이상 사용되지 않는 기능이 제거되었습니다.

  • retry_on:wait 옵션에서 더 이상 사용되지 않는 :exponentially_longer 값이 제거되었습니다.

13.2 Deprecation 정책

  • Rails.application.config.active_job.use_big_decimal_serialize 설정이 deprecate됩니다.

13.3 주목할만한 변경사항

14 Action Text

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

14.1 제거

14.2 지원 중단 안내

아래의 사항들은 Rails 7.1에서 지원이 중단되었고, Rails 7.2에서 삭제될 예정입니다. 앞으로도 이러한 기능들을 계속 사용하고자 한다면, 관련 gem을 애플리케이션의 Gemfile에 추가해야 합니다.

14.3 주요 변경사항

15 Action Mailbox

자세한 변경사항은 Changelog를 참조하시기 바랍니다.

15.1 제거

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

  • Running bin/rake db:structure:dump to load MySQL structure files will be deprecated. Run bin/rails db:structure:dump instead.

  • Running bin/rake db:structure:load to load MySQL structure files will be deprecated. Run bin/rails db:structure:load instead.

  • ActiveRecord::Base.connection_pool.release_connection가 더 이상 사용되지 않습니다. Active Record는 자동으로 connection pools를 관리할 것입니다.

  • config.action_mailer.old_stylesheet_path가 더 이상 사용되지 않습니다. mail guide를 통해 style 설정법을 참고하세요.

  • connection adapters에서 name 속성이 더 이상 사용되지 않습니다. human_name을 대신 사용하세요.

  • PostgreSQL Schema Dumper에서 create_schema가 더 이상 사용되지 않습니다. create_database를 대신 사용하세요.

  • ActionDispatch::Http::UploadedFile#read가 더 이상 사용되지 않습니다. IO#read를 대신 사용하세요.

  • ActiveModel::Validations::HelperMethodsvalidates :acceptance 메서드는 empty strings를 유효한 것으로 평가하는 것이 더 이상 사용되지 않습니다.

  • 매개변수 없이 Rails.application.secrets를 호출하는 것이 더 이상 사용되지 않습니다. 항상 매개변수를 지정하세요.

  • 마이그레이션에서 connection.quote에 인스턴스를 넘기는 것이 더 이상 사용되지 않습니다. connection.quote_string/quote_column_name/quote_table_name를 대신 사용하세요.

  • Rails 6.1에서 제거될 Rails.application.credentials.read가 더 이상 사용되지 않습니다. Rails.application.credentials.config를 대신 사용하세요.

  • Rails::Application.config_for에서 shared root sections가 더 이상 사용되지 않습니다. shared sections를 개별 설정 파일로 추출하세요.

15.3 주목할 만한 변경사항

16 Ruby on Rails 가이드

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

16.1 주목할 만한 변경사항

17 감사의 말

안정적이고 견고한 프레임워크인 Rails를 만들기 위해 수많은 시간을 할애한 Rails 기여자 전체 목록을 확인해보세요. 모든 분들께 경의를 표합니다.



맨 위로