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에 대한 지원을new
와db: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 ofconfig.i18n.raise_on_missing_translations = true
. (Pull Request)Remove deprecated
ActiveSupport::TimeWithZone.name
andActiveSupport::TimeWithZone.silence_redefinition_of_method
. (Pull Request)Remove deprecated support to use
Enumerator::Lazy
instead ofActiveSupport::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 inActiveRecord::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
fromRails.env
whenRails.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 inActiveRecord::Relation
. (Pull Request)Remove deprecated behavior of
ActiveSupport::TimeWithZone#to_s
with no argument. (Pull Request)Remove deprecated instance method
clean_up
fromActiveStorage::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
andActiveModel::Name#route_key
. (Pull Request)Remove deprecated instance method
purge
fromActiveStorage::Attachment
. (Pull Request)Remove deprecated instance method
purge_later
fromActiveStorage::Attachment
. (Pull Request)Remove deprecated instance method
purge
fromActiveStorage::Blob
. (Pull Request)Remove deprecated instance method
purge_later
fromActiveStorage::Blob
. (Pull Request)Remove deprecated option
database
fromrails dbconsole
. (Pull Request)Remove deprecated support for using unsafe legacy routing. (Pull Request)
Remove deprecated class method
configurations
fromActiveRecord::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?
andcomposed_of_embeds_one?
fromActiveModel::Reflection
. (Pull Request)Remove deprecated class method
clear_all_connections!
fromActiveRecord::Base
. (Pull Request)Remove deprecated class method
bootstrap_ar_deprecated
fromActiveRecord::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
===
inActiveSupport::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
fromActiveRecord::Base
. (Pull Request)Remove deprecated constant
ActiveStorage::BaseController::CONTENT_TYPE_WHITELIST
. (Pull Request)Remove deprecated instance method
validate_blacklist_content_types
fromActiveStorage::Blob
. (Pull Request)Remove deprecated instance method
validate_whitelist_content_types
fromActiveStorage::Blob
. (Pull Request)Remove deprecated instance method
blacklist_content_types
fromActiveStorage::Blob
. (Pull Request)Remove deprecated instance method
whitelist_content_types
fromActiveStorage::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
andMINIMUM_SUPPORTED_VERSIONS
constants inGem::Version
have been deprecated,Kernel#timeout
and its aliasKernel#timeout=
have been deprecated, andOpenSSL::Cipher#key=
andOpenSSL#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::Parameters
와Hash
간의 비교가 삭제되었습니다.더 이상 사용되지 않는
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_exceptions
를true
와false
로 설정하는 더 이상 사용되지 않는 지원이 삭제되었습니다.
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_responses
와rescue_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_connection
의name
인자 제거.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된
SchemaMigration
과InternalMetadata
클래스를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_key
에deferrable: true
전달 지원 제거.사용 중단된
ActiveRecord::Relation#merge
에rewhere
전달 지원 제거.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#children
과ActiveSupport::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::CLEAR
와ActiveSupport::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
를 제거했습니다.MemCacheStore
에Dalli::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. Runbin/rails db:structure:dump
instead.Running
bin/rake db:structure:load
to load MySQL structure files will be deprecated. Runbin/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::HelperMethods
의validates :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 기여자 전체 목록을 확인해보세요. 모든 분들께 경의를 표합니다.