rubyonrails.org에서 더 보기:

1 Rails 6.0으로 업그레이드

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

2 주요 기능

2.1 Action Mailbox

Pull Request

Action Mailbox를 사용하면 수신되는 이메일을 controller와 유사한 mailbox로 라우팅할 수 있습니다. Action Mailbox에 대해 더 자세히 알아보려면 Action Mailbox 기초 가이드를 참고하세요.

2.2 Action Text

Pull Request

Action Text는 Rails에 리치 텍스트 콘텐츠와 편집 기능을 제공합니다. 서식, 링크, 인용구, 목록, 이미지 및 갤러리 삽입 등 모든 것을 처리하는 Trix editor를 포함합니다. Trix editor로 생성된 리치 텍스트 콘텐츠는 애플리케이션의 모든 기존 Active Record 모델과 연결될 수 있는 자체 RichText 모델에 저장됩니다. 삽입된 이미지(또는 기타 첨부파일)는 Active Storage를 사용하여 자동으로 저장되며 포함된 RichText 모델과 연결됩니다.

Action Text에 대해 더 자세히 알아보려면 Action Text 개요 가이드를 참조하세요.

2.3 Parallel Testing

Pull Request

Parallel Testing을 사용하면 테스트 스위트를 병렬로 실행할 수 있습니다. 프로세스 포크가 기본 방식이지만, threading도 지원됩니다. 테스트를 병렬로 실행하면 전체 테스트 스위트를 실행하는 데 걸리는 시간을 줄일 수 있습니다.

2.4 Action Cable Testing

Pull Request

Action Cable testing 도구를 사용하면 connection, channel, broadcast 등 모든 수준에서 Action Cable 기능을 테스트할 수 있습니다.

3 Railties

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

3.1 제거된 기능

  • plugins templates 내의 더 이상 사용되지 않는 after_bundle helper를 제거했습니다. (Commit)

  • application 클래스를 run의 인자로 사용하는 config.ru에 대한 더 이상 사용되지 않는 지원을 제거했습니다. (Commit)

  • rails 명령어에서 더 이상 사용되지 않는 environment 인자를 제거했습니다. (Commit)

  • generators와 templates에서 더 이상 사용되지 않는 capify! 메소드를 제거했습니다. (Commit)

  • 더 이상 사용되지 않는 config.secret_token을 제거했습니다. (Commit)

3.2 지원 중단 예정

  • rails server에 Rack server 이름을 일반 인자로 전달하는 것이 지원 중단될 예정입니다. (Pull Request)

  • 서버 IP를 지정하기 위해 HOST 환경 변수를 사용하는 것이 지원 중단될 예정입니다. (Pull Request)

  • config_for가 반환하는 hash를 symbol이 아닌 키로 접근하는 것이 지원 중단될 예정입니다. (Pull Request)

3.3 주요 변경사항

  • rails server 명령어에서 server를 지정하기 위한 명시적 옵션 --using 또는 -u를 추가했습니다. (Pull Request)

  • rails routes 출력을 확장된 형식으로 볼 수 있는 기능을 추가했습니다. (Pull Request)

  • inline Active Job adapter를 사용하여 seed 데이터베이스 태스크를 실행합니다. (Pull Request)

  • 애플리케이션의 데이터베이스를 변경하기 위한 rails db:system:change 명령어를 추가했습니다. (Pull Request)

  • Action Cable channels만 테스트하기 위한 rails test:channels 명령어를 추가했습니다. (Pull Request)

  • DNS rebinding 공격에 대한 보호를 도입했습니다. (Pull Request)

  • generator 명령어 실행 중 실패 시 중단할 수 있는 기능을 추가했습니다. (Pull Request)

  • Rails 6에서 Webpacker를 기본 JavaScript 컴파일러로 지정했습니다. (Pull Request)

  • rails db:migrate:status 명령어에 다중 데이터베이스 지원을 추가했습니다. (Pull Request)

  • generator에서 여러 데이터베이스의 서로 다른 migration 경로를 사용할 수 있는 기능을 추가했습니다. (Pull Request)

  • 다중 환경 credentials 지원을 추가했습니다. (Pull Request)

  • test 환경에서 null_store를 기본 cache store로 지정했습니다. (Pull Request)

4 Action Cable

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

4.1 삭제 항목

  • ActionCable.startDebugging()ActionCable.stopDebugging()ActionCable.logger.enabled로 대체되었습니다. (Pull Request)

4.2 폐기 예정

  • Rails 6.0의 Action Cable에는 폐기 예정인 기능이 없습니다.

4.3 주요 변경 사항

  • cable.yml에서 PostgreSQL subscription adapter를 위한 channel_prefix 옵션 지원을 추가했습니다. (Pull Request)

  • ActionCable::Server::Base에 사용자 정의 설정을 전달할 수 있게 되었습니다. (Pull Request)

  • :action_cable_connection:action_cable_channel load hook을 추가했습니다. (Pull Request)

  • Channel::Base#broadcast_toChannel::Base.broadcasting_for를 추가했습니다. (Pull Request)

  • ActionCable::Connection에서 reject_unauthorized_connection을 호출할 때 연결을 종료하도록 했습니다. (Pull Request)

  • Action Cable JavaScript 패키지를 CoffeeScript에서 ES2015로 변환하고 npm 배포판에 소스 코드를 공개했습니다. (Pull Request)

  • WebSocket adapter와 logger adapter의 설정을 ActionCable의 속성에서 ActionCable.adapters로 이동했습니다. (Pull Request)

  • Action Cable의 Redis 연결을 구분하기 위해 Redis adapter에 id 옵션을 추가했습니다. (Pull Request)

5 Action Pack

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

5.1 제거된 기능

  • 더 이상 사용되지 않는 fragment_cache_key 헬퍼를 제거하고 combined_fragment_cache_key를 사용하도록 변경되었습니다. (Commit)

  • ActionDispatch::TestResponse에서 더 이상 사용되지 않는 다음 메서드들이 제거되었습니다: #success?#successful?로, #missing?#not_found?로, #error?#server_error?로 대체되었습니다. (Commit)

5.2 Deprecations

  • ActiveSupport::ParameterFilter을 위해 ActionDispatch::Http::ParameterFilter가 Deprecate 되었습니다. (Pull Request)

  • config.force_ssl을 위해 컨트롤러 레벨의 force_ssl이 Deprecate 되었습니다. (Pull Request)

5.3 주목할 만한 변경사항

  • ActionDispatch::Response#content_type이 Content-Type 헤더를 그대로 반환하도록 변경되었습니다. (Pull Request)

  • resource 파라미터에 콜론이 포함된 경우 ArgumentError를 발생시킵니다. (Pull Request)

  • 특정 브라우저 기능을 정의하기 위해 블록과 함께 ActionDispatch::SystemTestCase.driven_by를 호출할 수 있습니다. (Pull Request)

  • DNS 리바인딩 공격을 방어하는 ActionDispatch::HostAuthorization 미들웨어가 추가되었습니다. (Pull Request)

  • ActionController::TestCase에서 parsed_body 사용이 가능해졌습니다. (Pull Request)

  • 동일한 컨텍스트에서 as: 네이밍 지정 없이 여러 root 라우트가 존재할 경우 ArgumentError를 발생시킵니다. (Pull Request)

  • 파라미터 파싱 오류를 처리하기 위한 #rescue_from 사용이 가능해졌습니다. (Pull Request)

  • 파라미터를 반복하기 위한 ActionController::Parameters#each_value가 추가되었습니다. (Pull Request)

  • send_datasend_file에서 Content-Disposition 파일명을 인코딩합니다. (Pull Request)

  • ActionController::Parameters#each_key가 노출되었습니다. (Pull Request)

  • 서명/암호화된 쿠키 간에 값이 복사되는 것을 방지하기 위해 쿠키 내부에 용도와 만료 메타데이터를 추가했습니다. (Pull Request)

  • 충돌하는 respond_to 호출에 대해 ActionController::RespondToMismatchError를 발생시킵니다. (Pull Request)

  • 요청 포맷에 대한 템플릿이 누락된 경우를 위한 명시적인 오류 페이지가 추가되었습니다. (Pull Request)

  • DebugExceptions에 연결하여 렌더링 전에 예외를 처리하는 방법인 ActionDispatch::DebugExceptions.register_interceptor가 도입되었습니다. (Pull Request)

  • 요청당 하나의 Content-Security-Policy nonce 헤더 값만 출력합니다. (Pull Request)

  • 컨트롤러에서 명시적으로 포함할 수 있는 Rails 기본 헤더 설정을 위한 모듈을 추가합니다. (Pull Request)

  • ActionDispatch::Request::Session#dig를 추가합니다. (Pull Request)

6 Action View

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

6.1 제거

  • 지원 중단된 image_alt helper를 제거했습니다. (Commit)

  • 기능이 이미 record_tag_helper gem으로 이동된 빈 RecordTagHelper 모듈을 제거했습니다. (Commit)

6.2 Deprecations

  • ActionView::Template.finalize_compiled_template_methods를 대체 없이 deprecate합니다. (Pull Request)

  • config.action_view.finalize_compiled_template_methods를 대체 없이 deprecate합니다. (Pull Request)

  • options_from_collection_for_select view helper에서 private 모델 메서드를 호출하는 것을 deprecate합니다. (Pull Request)

6.3 주목할만한 변경사항

  • 개발 모드의 속도를 높이기 위해 파일 변경 시에만 Action View 캐시를 초기화합니다. (Pull Request)

  • 모든 Rails npm 패키지를 @rails 스코프로 이동했습니다. (Pull Request)

  • 등록된 MIME 타입의 포맷만 허용합니다. (Pull Request, Pull Request)

  • 템플릿과 부분 렌더링 서버 출력에 할당을 추가했습니다. (Pull Request)

  • date_select 태그에 year_format 옵션을 추가하여 연도 이름을 커스터마이징할 수 있게 되었습니다. (Pull Request)

  • Content Security Policy를 위한 자동 nonce 생성을 지원하기 위해 javascript_include_tag 헬퍼에 nonce: true 옵션을 추가했습니다. (Pull Request)

  • ActionView::Template finalizer를 비활성화하거나 활성화하기 위한 action_view.finalize_compiled_template_methods 설정을 추가했습니다. (Pull Request)

  • rails_ujs에서 JavaScript confirm 호출을 재정의 가능한 별도의 메서드로 추출했습니다. (Pull Request)

  • UTF-8 인코딩 적용을 처리하기 위한 action_controller.default_enforce_utf8 설정 옵션을 추가했습니다. 기본값은 false입니다. (Pull Request)

  • submit 태그에 로케일 키를 위한 I18n 키 스타일 지원을 추가했습니다. (Pull Request)

7 Action Mailer

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

7.1 제거

  • The ActionDispatch::Response.default_charset class attribute has been removed. You can now configure through config.action_dispatch.default_charset.

Rafael Mendonça França

  • The config.action_dispatch.return_only_media_type_on_content_type option has been removed. This configuration value defaulted to false and was planned to be changed to true in Rails 7.0.

Rafael Mendonça França

  • Removed deprecated config.action_mailer.deliver_later_queue_name, use config.action_mailer.deliver_later_queue instead.

Rafael Mendonça França

  • Removed deprecated config.action_mailbox.queues.incineration in favor of config.action_mailbox.incinerate_after.

Rafael Mendonça França

  • Removed deprecated config.action_mailbox.queues.routing in favor of config.action_mailbox.routing_after.

Rafael Mendonça França

  • Removed deprecated ActionMailer::Base.receive in favor of Action Mailbox.

Rafael Mendonça França

  • Removed deprecated config.action_view.raise_on_missing_translations in favor of config.i18n.raise_on_missing_translations.

Rafael Mendonça França

  • Remove deprecated support to passing a path to fixture_file_upload relative to fixture_path.

Rafael Mendonça França

7.2 지원 중단 예정

  • Action Mailbox를 사용하는 것이 권장되어 ActionMailer::Base.receive는 지원 중단될 예정입니다. (Commit)

  • DeliveryJobParameterized::DeliveryJob 대신 MailDeliveryJob을 사용하는 것이 권장되어 지원 중단될 예정입니다. (Pull Request)

7.3 주목할만한 변경사항

  • 일반 메일과 매개변수화된 메일을 전달하기 위한 MailDeliveryJob 추가. (Pull Request)

  • Action Mailer 테스트 assertion들이 커스텀 이메일 전송 job들과 함께 작동하도록 허용. (Pull Request)

  • 액션 이름만 사용하는 대신 블록이 있는 멀티파트 이메일에 대한 템플릿 이름 지정 허용. (Pull Request)

  • deliver.action_mailer 알림의 payload에 perform_deliveries 추가. (Pull Request)

  • perform_deliveries가 false일 때 이메일 전송이 건너뛰어졌음을 표시하도록 로깅 메시지 개선. (Pull Request)

  • 블록 없이 assert_enqueued_email_with 호출 허용. (Pull Request)

  • assert_emails 블록에서 대기 중인 메일 전송 job 실행. (Pull Request)

  • ActionMailer::Base가 observer와 interceptor를 등록 해제할 수 있도록 허용. (Pull Request)

8 Active Record

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

8.1 제거된 기능

  • transaction 객체에서 deprecated된 #set_state 제거. (Commit)

  • database adapter에서 deprecated된 #supports_statement_cache? 제거. (Commit)

  • database adapter에서 deprecated된 #insert_fixtures 제거. (Commit)

  • deprecated된 ActiveRecord::ConnectionAdapters::SQLite3Adapter#valid_alter_table_type? 제거. (Commit)

  • block이 전달될 때 sum에 column 이름을 전달하는 기능 지원 제거. (Commit)

  • block이 전달될 때 count에 column 이름을 전달하는 기능 지원 제거. (Commit)

  • relation에서 누락된 메서드를 Arel로 위임하는 기능 지원 제거. (Commit)

  • relation에서 누락된 메서드를 클래스의 private 메서드로 위임하는 기능 지원 제거. (Commit)

  • #cache_key에 timestamp 이름을 지정하는 기능 지원 제거. (Commit)

  • deprecated된 ActiveRecord::Migrator.migrations_path= 제거. (Commit)

  • deprecated된 expand_hash_conditions_for_aggregates 제거. (Commit)

8.2 Deprecations

  • uniqueness validator에서 대소문자 구분 collation 비교가 일치하지 않는 경우를 deprecated 처리합니다. (Commit)

  • receiver scope가 유출된 경우 클래스 레벨 쿼리 메소드 사용을 deprecated 처리합니다. (Pull Request)

  • config.active_record.sqlite3.represent_boolean_as_integer를 deprecated 처리합니다. (Commit)

  • connection.assume_migrated_upto_versionmigrations_paths를 전달하는 것을 deprecated 처리합니다. (Commit)

  • ActiveRecord::Result#to_hashActiveRecord::Result#to_a 사용을 권장하며 deprecated 처리합니다. (Commit)

  • DatabaseLimits의 다음 메소드들을 deprecated 처리합니다: column_name_length, table_name_length, columns_per_table, indexes_per_table, columns_per_multicolumn_index, sql_query_length, joins_per_query. (Commit)

  • update_attributes/!update/! 사용을 권장하며 deprecated 처리합니다. (Commit)

8.3 주목할만한 변경사항

  • sqlite3 gem의 최소 버전을 1.4로 올림. (Pull Request)

  • 데이터베이스가 존재하지 않을 경우 생성하고 migration을 실행하는 rails db:prepare 추가. (Pull Request)

  • after_commit :hook, on: [ :create, :update ]의 단축어로 after_save_commit callback 추가. (Pull Request)

  • relation에서 관련 레코드를 추출하는 ActiveRecord::Relation#extract_associated 추가. (Pull Request)

  • ActiveRecord::Relation 쿼리에 SQL 주석을 추가하는 ActiveRecord::Relation#annotate 추가. (Pull Request)

  • 데이터베이스에 Optimizer Hints 설정 지원 추가. (Pull Request)

  • 대량 삽입을 위한 insert_all/insert_all!/upsert_all 메서드 추가. (Pull Request)

  • 현재 환경의 각 데이터베이스 테이블을 truncate하고 seed를 로드하는 rails db:seed:replant 추가. (Pull Request)

  • unscope(:select).select(fields)의 단축어인 reselect 메서드 추가. (Pull Request)

  • 모든 enum 값에 대한 negative scope 추가. (Pull Request)

  • 조건부 삭제를 위한 #destroy_by#delete_by 추가. (Pull Request)

  • 데이터베이스 연결을 자동으로 전환하는 기능 추가. (Pull Request)

  • 블록 동안 데이터베이스 쓰기를 방지하는 기능 추가. (Pull Request)

  • 다중 데이터베이스를 지원하기 위한 연결 전환 API 추가. (Pull Request)

  • migration에서 precision이 있는 timestamps를 기본값으로 설정. (Pull Request)

  • MySQL에서 text와 blob 크기를 변경하기 위한 :size 옵션 지원. (Pull Request)

  • dependent: :nullify 전략에서 polymorphic associations를 위한 foreign key와 foreign type 컬럼을 모두 NULL로 설정합니다. (Pull Request)

  • ActiveRecord::Relation#exists?의 인자로 허용된 ActionController::Parameters 인스턴스를 전달할 수 있도록 합니다. (Pull Request)

  • Ruby 2.6에서 도입된 endless ranges를 #where에서 지원합니다. (Pull Request)

  • MySQL에서 테이블 생성 시 ROW_FORMAT=DYNAMIC을 기본 옵션으로 설정합니다. (Pull Request)

  • ActiveRecord.enum에 의해 생성된 scopes를 비활성화할 수 있는 기능을 추가합니다. (Pull Request)

  • 컬럼에 대한 암시적 정렬을 구성 가능하도록 만듭니다. (Pull Request)

  • 최소 PostgreSQL 버전을 9.3으로 올리고, 9.1과 9.2 지원을 중단합니다. (Pull Request)

  • enum의 값들을 frozen으로 만들어, 수정 시도 시 에러를 발생시킵니다. (Pull Request)

  • ActiveRecord::StatementInvalid 에러의 SQL을 독립된 에러 속성으로 만들고, SQL binds를 별도의 에러 속성으로 포함시킵니다. (Pull Request)

  • create_table:if_not_exists 옵션을 추가합니다. (Pull Request)

  • rails db:schema:cache:dumprails db:schema:cache:clear에 다중 데이터베이스 지원을 추가합니다. (Pull Request)

  • ActiveRecord::Base.connected_to의 데이터베이스 해시에 hash와 url 설정 지원을 추가합니다. (Pull Request)

  • MySQL에 대한 default expressions와 expression indexes 지원을 추가합니다. (Pull Request)

  • migration 헬퍼 change_tableindex 옵션을 추가합니다. (Pull Request)

  • migration의 transaction 되돌리기를 수정합니다. 이전에는 되돌려진 migration의 transaction 내부 명령어들이 반전되지 않고 실행되었습니다. 이 변경사항이 이를 수정합니다. (Pull Request)

  • ActiveRecord::Base.configurations=가 심볼화된 해시로 설정되는 것을 허용합니다. (Pull Request)

  • 레코드가 실제로 저장될 때만 counter cache를 업데이트하도록 수정했습니다. (Pull Request)

  • SQLite adapter에 expression indexes 지원을 추가했습니다. (Pull Request)

  • 하위 클래스가 연관된 레코드에 대한 autosave 콜백을 재정의할 수 있도록 허용합니다. (Pull Request)

  • 최소 MySQL 버전을 5.5.8로 올렸습니다. (Pull Request)

  • MySQL에서 기본 문자셋으로 utf8mb4를 사용합니다. (Pull Request)

  • #inspect에서 민감한 데이터를 필터링하는 기능을 추가했습니다. (Pull Request, Pull Request)

  • ActiveRecord::Base.configurations가 해시 대신 객체를 반환하도록 변경했습니다. (Pull Request)

  • advisory locks를 비활성화하는 데이터베이스 설정을 추가했습니다. (Pull Request)

  • SQLite3 adapter의 alter_table 메소드를 foreign keys를 복원하도록 업데이트했습니다. (Pull Request)

  • remove_foreign_key:to_table 옵션을 역전 가능하도록 허용합니다. (Pull Request)

  • 지정된 precision을 가진 MySQL time 타입의 기본값을 수정했습니다. (Pull Request)

  • touch 옵션이 Persistence#touch 메소드와 일관되게 동작하도록 수정했습니다. (Pull Request)

  • Migrations에서 중복된 컬럼 정의에 대해 예외를 발생시킵니다. (Pull Request)

  • 최소 SQLite 버전을 3.8로 올렸습니다. (Pull Request)

  • 부모 레코드가 중복된 자식 레코드와 함께 저장되지 않도록 수정했습니다. (Pull Request)

  • Associations::CollectionAssociation#sizeAssociations::CollectionAssociation#empty?

로드된 association ID가 있으면 사용합니다. (Pull Request)

  • 모든 레코드가 요청된 association을 가지고 있지 않을 때 polymorphic association의 association을 preload하는 기능을 추가합니다. (Commit)

  • ActiveRecord::Relationtouch_all 메서드를 추가합니다. (Pull Request)

  • ActiveRecord::Base.base_class? predicate를 추가합니다. (Pull Request)

  • ActiveRecord::Store.store_accessor에 커스텀 prefix/suffix 옵션을 추가합니다. (Pull Request)

  • 데이터베이스의 unique constraint를 활용하여 ActiveRecord::Base.find_or_create_by/!의 SELECT/INSERT 경쟁 상태를 다루기 위한 ActiveRecord::Base.create_or_find_by/!를 추가합니다. (Pull Request)

  • 단일 값 pluck의 단축형으로 Relation#pick을 추가합니다. (Pull Request)

9 Active Storage

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

9.1 제거

9.2 Deprecations

  • config.active_storage.queueconfig.active_storage.queues.analysisconfig.active_storage.queues.purge를 대신 사용하도록 deprecate 되었습니다. (Pull Request)

  • ActiveStorage::DownloadingActiveStorage::Blob#open을 대신 사용하도록 deprecate 되었습니다. (Commit)

  • 이미지 variant를 생성하기 위해 mini_magick을 직접 사용하는 것은 image_processing을 대신 사용하도록 deprecate 되었습니다. (Commit)

  • Active Storage의 ImageProcessing transformer에서 :combine_options는 대체 없이 deprecate 되었습니다. (Commit)

9.3 주목할 만한 변경사항

  • BMP 이미지 variant 생성 지원 추가. (Pull Request)

  • TIFF 이미지 variant 생성 지원 추가. (Pull Request)

  • Progressive JPEG 이미지 variant 생성 지원 추가. (Pull Request)

  • Active Storage 생성 라우트를 설정하기 위한 ActiveStorage.routes_prefix 추가. (Pull Request)

  • 요청된 파일이 disk service에 없을 때 ActiveStorage::DiskController#show에서 404 Not Found 응답 생성. (Pull Request)

  • ActiveStorage::Blob#downloadActiveStorage::Blob#open에서 요청된 파일이 없을 때 ActiveStorage::FileNotFoundError 발생. (Pull Request)

  • Active Storage 예외들이 상속받는 일반적인 ActiveStorage::Error 클래스 추가. (Commit)

  • 레코드에 할당된 업로드된 파일들을 즉시가 아닌 레코드가 저장될 때 storage에 유지. (Pull Request)

  • attachment 컬렉션에 할당할 때(예: @user.update!(images: [ … ])) 기존 파일들에 추가하는 대신 선택적으로 교체. 이 동작을 제어하려면 config.active_storage.replace_on_assign_to_many를 사용. (Pull Request, Pull Request)

  • 기존 Active Record reflection 메커니즘을 사용하여 정의된 attachment들을 reflection할 수 있는 기능 추가. (Pull Request)

  • blob을 디스크의 tempfile로 다운로드하고 tempfile을 yield하는 ActiveStorage::Blob#open 추가. (Commit)

  • Google Cloud Storage에서 스트리밍 다운로드 지원. google-cloud-storage gem 버전 1.11 이상 필요. (Pull Request)

  • Active Storage variant를 위해 image_processing gem 사용. 이는 직접적인 mini_magick 사용을 대체. (Pull Request)

10 Active Model

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

10.1 제거사항

  • Removed support for the delete_all method with conditions. You'll need to use where with delete_all instead.
  • Removed support for the :conditions, :include options in association and query methods.
  • Removed support for the find(:first) and find(:all) syntax. Use Model.first and Model.all instead.
  • Removed support for custom timestamp names. You'll need to configure them using config options rather than setting them on the model.
  • Removed support for using has_and_belongs_to_many associations without a join model. Always use a standard model as a join model.
  • Removed support for calling ActiveRecord::Base#set_timestamps_for_create and ActiveRecord::Base#set_timestamps_for_update directly.
  • Removed queue_adapter from rails/all. You'll need to explicitly require active_job/railtie if you want to use Active Job with Rails.
  • Removed access to the ThreadCurrent.active_queries counter which was just used for internal Active Record bookkeeping.

10.2 지원 중단(Deprecation)

  • AbstractController::Helpers::MissingHelperError는 Ruby on Rails 6.1에서 지원이 중단되었으며 7.0에서 제거되었습니다. LoadErrorNameError를 대신 사용하세요. (Pull Request)

  • 경로 helper에 대한 compact_blank의 기본값이 false로 변경되었습니다. 이는 helper가 빈 key/value pair를 유지하도록 합니다. (Pull Request)

  • Named routes에 대한 *args 지원이 지원 중단되었습니다. 대신 키워드 인자를 사용하세요. (Pull Request)

  • ActionDispatch::SystemTesting::Server::DEFAULT_PORT 상수가 지원 중단되어 7.1에서 제거될 예정입니다. (Pull Request)

  • config.action_dispatch.return_only_request_media_type_on_content_type configuration이 지원 중단되어 7.1에서 제거될 예정입니다. (Pull Request)

  • URL helper에서 only_path 옵션이 지원 중단되었으며 Rails 7.1에서 제거될 예정입니다. (Pull Request)

10.3 주목할만한 변경사항

  • ActiveModel::Errors#full_message의 포맷을 커스터마이징할 수 있는 설정 옵션을 추가했습니다. (Pull Request)

  • has_secure_password의 속성 이름을 설정할 수 있도록 지원을 추가했습니다. (Pull Request)

  • ActiveModel::Errors#slice! 메소드를 추가했습니다. (Pull Request)

  • 특정 에러의 존재 여부를 확인하기 위한 ActiveModel::Errors#of_kind?를 추가했습니다. (Pull Request)

  • 타임스탬프에 대한 ActiveModel::Serializers::JSON#as_json 메소드를 수정했습니다. (Pull Request)

  • Active Record를 제외하고 타입 변환 이전의 값을 계속 사용하도록 숫자 유효성 검사기를 수정했습니다. (Pull Request)

  • 유효성 검사의 양쪽 끝에서 BigDecimal로 캐스팅하여 BigDecimalFloat의 숫자 동등성 유효성 검사를 수정했습니다. (Pull Request)

  • 다중 파라미터 시간 해시를 캐스팅할 때 연도 값을 수정했습니다. (Pull Request)

  • boolean 속성에서 falsy한 boolean 심볼을 false로 타입 캐스팅하도록 수정했습니다. (Pull Request)

  • ActiveModel::Type::Date에서 value_from_multiparameter_assignment의 파라미터를 변환할 때 올바른 날짜를 반환하도록 수정했습니다. (Pull Request)

  • 에러 번역을 가져올 때 :errors 네임스페이스로 폴백하기 전에 상위 로케일로 폴백하도록 수정했습니다. (Pull Request)

11 Active Support

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

11.1 Removals

  • Inflections에서 deprecated된 #acronym_regex 메서드를 제거했습니다. (Commit)

  • deprecated된 Module#reachable? 메서드를 제거했습니다. (Commit)

  • 대체 없이 Kernel#`를 제거했습니다. (Pull Request)

11.2 Deprecations

  • String#firstString#last에서 음수 정수 인수 사용을 deprecated 처리합니다. (Pull Request)

  • String#downcase/upcase/swapcase를 선호하여 ActiveSupport::Multibyte::Unicode#downcase/upcase/swapcase를 deprecated 처리합니다. (Pull Request)

  • String#unicode_normalize를 선호하여 ActiveSupport::Multibyte::Unicode#normalizeActiveSupport::Multibyte::Chars#normalize를 deprecated 처리합니다. (Pull Request)

  • String#is_utf8?를 선호하여 ActiveSupport::Multibyte::Chars.consumes?를 deprecated 처리합니다. (Pull Request)

  • 각각 array.flatten.pack("U*")string.scan(/\X/).map(&:codepoints)를 선호하여 ActiveSupport::Multibyte::Unicode#pack_graphemes(array)ActiveSupport::Multibyte::Unicode#unpack_graphemes(string)를 deprecated 처리합니다. (Pull Request)

11.3 주목할 만한 변경사항

  • 병렬 테스팅을 위한 지원 추가. (Pull Request)

  • String#strip_heredoc가 문자열의 frozen 상태를 보존하도록 수정. (Pull Request)

  • 멀티바이트 문자나 그래핌 클러스터를 깨트리지 않고 문자열을 최대 바이트 크기로 자르는 String#truncate_bytes 추가. (Pull Request)

  • private 메소드에 위임할 수 있도록 delegate 메소드에 private 옵션 추가. 이 옵션은 true/false 값을 받습니다. (Pull Request)

  • ActiveSupport::Inflector#ordinalActiveSupport::Inflector#ordinalize에 I18n을 통한 번역 지원 추가. (Pull Request)

  • Date, DateTime, Time, TimeWithZonebefore?after? 메소드 추가. (Pull Request)

  • 유니코드와 이스케이프된 문자가 혼합된 입력에서 URI.unescape가 실패하는 버그 수정. (Pull Request)

  • 압축이 활성화되었을 때 ActiveSupport::Cache가 저장 크기를 과도하게 증가시키는 버그 수정. (Pull Request)

  • Redis cache store: delete_matched가 더 이상 Redis 서버를 차단하지 않음. (Pull Request)

  • ActiveSupport::TimeZone::MAPPING에 정의된 타임존의 tzinfo 데이터가 누락되었을 때 ActiveSupport::TimeZone.all이 실패하는 버그 수정. (Pull Request)

  • 전달된 블록이나 기본 인자의 값으로 열거형에서 해시를 생성할 수 있는 Enumerable#index_with 추가. (Pull Request)

  • Range#===Range#cover? 메소드가 Range 인자와 함께 작동하도록 허용. (Pull Request)

  • RedisCacheStore의 increment/decrement 작업에서 키 만료 지원. (Pull Request)

  • 로그 구독자 이벤트에 CPU 시간, 유휴 시간, 할당 기능 추가.

  • Active Support notification system에 event object 지원 추가. (Pull Request)

  • ActiveSupport::Cache#fetch에 새로운 옵션 skip_nil을 도입하여 nil 항목을 캐시하지 않는 기능 지원 추가. (Pull Request)

  • block이 true 값을 반환하는 요소들을 제거하고 반환하는 Array#extract! 메서드 추가. (Pull Request)

  • HTML-safe 문자열을 슬라이싱 후에도 HTML-safe로 유지. (Pull Request)

  • 로깅을 통한 constant autoload 추적 지원 추가. (Commit)

  • travel_back의 별칭으로 unfreeze_time 정의. (Pull Request)

  • ActiveSupport::TaggedLogging.new가 인자로 받은 logger를 변경하는 대신 새로운 logger 인스턴스를 반환하도록 변경. (Pull Request)

  • #delete_prefix, #delete_suffix, #unicode_normalize 메서드를 non HTML-safe 메서드로 처리. (Pull Request)

  • ActiveSupport::HashWithIndifferentAccess#without이 symbol 인자와 함께 실패하는 버그 수정. (Pull Request)

  • Module#parent, Module#parents, Module#parent_namemodule_parent, module_parents, module_parent_name으로 이름 변경. (Pull Request)

  • ActiveSupport::ParameterFilter 추가. (Pull Request)

  • float가 duration에 추가될 때 duration이 정수 초로 반올림되는 문제 수정. (Pull Request)

  • ActiveSupport::HashWithIndifferentAccess에서 #to_options#symbolize_keys의 별칭으로 만들기. (Pull Request)

  • 동일한 block이 여러 번 포함되어도 더 이상 예외를 발생시키지 않음

Concern에 대한 것입니다.

  • ActiveSupport::CacheStore#fetch_multi에 전달된 키의 순서를 유지합니다. (Pull Request)

  • 잘못된 케이스의 상수 참조에 대해 LoadError를 발생시키지 않도록 String#safe_constantize를 수정했습니다. (Pull Request)

  • Hash#deep_transform_valuesHash#deep_transform_values!를 추가했습니다. (Commit)

  • ActiveSupport::HashWithIndifferentAccess#assoc를 추가했습니다. (Pull Request)

  • CurrentAttributesbefore_reset 콜백을 추가하고 대칭성을 위해 resets의 별칭으로 after_reset을 정의했습니다. (Pull Request)

  • Regex 또는 다른 다중 패턴 구독자를 올바르게 처리하도록 ActiveSupport::Notifications.unsubscribe를 수정했습니다. (Pull Request)

  • Zeitwerk를 사용하는 새로운 autoloading 메커니즘을 추가했습니다. (Commit)

  • 컬렉션을 편리하게 확장하기 위해 Array#includingEnumerable#including을 추가했습니다. (Commit)

  • Array#withoutEnumerable#withoutArray#excludingEnumerable#excluding으로 이름을 변경했습니다. 이전 메서드 이름은 별칭으로 유지됩니다. (Commit)

  • transliterateparameterizelocale 제공 지원을 추가했습니다. (Pull Request)

  • 1001-03-07 이전 날짜에 대해서도 작동하도록 Time#advance를 수정했습니다. (Pull Request)

  • 블록을 전달하지 않아도 되도록 ActiveSupport::Notifications::Instrumenter#instrument를 업데이트했습니다. (Pull Request)

  • 익명 서브클래스가 가비지 컬렉션될 수 있도록 descendants 트래커에서 weak references를 사용합니다. (Pull Request)

  • minitest-hooks를 허용하기 위해 with_info_handler 메서드로 테스트 메서드를 호출합니다.

플러그인이 작동하도록 합니다. (Commit)

  • ActiveSupport::SafeBuffer#*에서 html_safe? 상태를 유지합니다. (Pull Request)

12 Active Job

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

12.1 제거사항

12.2 Deprecation(지원 중단)

  • 메소드가 private 액세서를 통해 정의된 경우, attribute writer에 private access를 설정하는 것은 더 이상 무시되지 않습니다. Rails 7.1에서는 오류가 발생합니다.
  private

  attr_writer :foo  # 이는 foo=를 private로 만듭니다
  • Active Storage URL binding parameterization이 제거되었습니다.

  • rescue_from with Exception 핸들러가 제거되었습니다.

  • Range query annotation이 제거되었습니다.

  • Rails.application.config.action_mailbox.queue_name이 제거되었습니다.

  • Rails.application.config.action_mailer.deliver_later_queue_name이 제거되었습니다.

  • Rails.application.config.active_storage.queue가 제거되었습니다.

  • 구성 파일에서 engine의 self.loaded_config_version을 정의하는 것이 제거되었습니다.

  • respond_to에서 :json 제외를 사용하는 것이 제거되었습니다.

  • Application의 self.loaded_config_version을 정의하는 것이 제거되었습니다.

  • ActiveStorage::Current#host가 제거되었습니다.

  • ActiveStorage::Current#host=가 제거되었습니다.

  • config.active_storage.resolve_model_to_route가 제거되었습니다.

  • config.active_storage.replace_on_assign_to_many가 제거되었습니다.

  • ActiveStorage::Attached::One#attachment가 제거되었습니다.

  • ActiveStorage::Attached::Many#attachments가 제거되었습니다.

  • ActiveStorage::Attachment#download이 제거되었습니다.

  • ActiveStorage::Blob#download이 제거되었습니다.

  • ActiveStorage::Blob#open이 제거되었습니다.

  • Rails 7.1에서는 config.active_support.use_rfc4122_namespaced_uuids가 더 이상 선택 사항이 아닐 것이며, 모든 UUID namespace가 RFC 4122를 준수하게 될 것입니다. 이 변경사항에 대한 자세한 내용은 rails/rails#49477을 참조하세요.

  • AbstractController::Helpers::MissingHelperErrorLoadError가 아닌 NameError를 상속하도록 변경되었습니다.

  • config.action_dispatch.return_only_request_media_type_on_content_type가 제거되었습니다.

12.3 주요 변경사항

  • Active Job arguments를 위한 커스텀 serializer 지원을 추가했습니다. (Pull Request)

  • Active Job이 enqueue된 시간대에서 실행되도록 지원을 추가했습니다. (Pull Request)

  • retry_on/discard_on에 여러 exception을 전달할 수 있도록 했습니다. (Commit)

  • 블록 없이 assert_enqueued_withassert_enqueued_email_with를 호출할 수 있도록 했습니다. (Pull Request)

  • enqueueenqueue_at의 notifications을 after_enqueue callback 대신 around_enqueue callback으로 감쌌습니다. (Pull Request)

  • 블록 없이 perform_enqueued_jobs를 호출할 수 있도록 했습니다. (Pull Request)

  • 블록 없이 assert_performed_with를 호출할 수 있도록 했습니다. (Pull Request)

  • job assertions와 helpers에 :queue 옵션을 추가했습니다. (Pull Request)

  • Active Job의 retry와 discard 주변에 hooks를 추가했습니다. (Pull Request)

  • job 수행 시 arguments의 부분집합을 테스트하는 방법을 추가했습니다. (Pull Request)

  • Active Job 테스트 helpers가 반환하는 jobs에 역직렬화된 arguments를 포함했습니다. (Pull Request)

  • Active Job assertion helpers가 only 키워드에 대해 Proc을 받을 수 있도록 했습니다. (Pull Request)

  • assertion helpers의 job arguments에서 마이크로초와 나노초를 제거했습니다. (Pull Request)

13 Ruby on Rails 가이드

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

13.1 주목할 만한 변경사항

  • Active Record로 다중 데이터베이스를 사용하는 가이드를 추가했습니다. (Pull Request)

  • 상수 자동로딩 문제해결에 대한 섹션을 추가했습니다. (Commit)

  • Action Mailbox 기초 가이드를 추가했습니다. (Pull Request)

  • Action Text 개요 가이드를 추가했습니다. (Pull Request)

14 감사의 말

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



맨 위로