Ruby on Rails 5.0 릴리스 노트

Rails 5.0의 주요 기능:

  • Action Cable
  • Rails API
  • Active Record 속성 API
  • 테스트 러너
  • Rake 대신 rails CLI 전용 사용
  • Sprockets 3
  • Turbolinks 5
  • Ruby 2.2.2+ 필요

이 릴리스 노트에서는 주요 변경 사항만 다룹니다. 다양한 버그 수정 및 변경 사항에 대해서는 변경 로그를 참조하거나 GitHub의 Rails 주 저장소에서 커밋 목록을 확인하세요.


Rails 5.0으로 업그레이드하기

기존 애플리케이션을 업그레이드하는 경우, 업그레이드 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 또한 Rails 4.2로 먼저 업그레이드하고 애플리케이션이 여전히 예상대로 작동하는지 확인한 후에 Rails 5.0으로 업그레이드를 시도해야 합니다. Rails 5.0으로 업그레이드할 때 주의해야 할 사항은 “Ruby on Rails 업그레이드” 가이드에서 확인할 수 있습니다.

주요 기능

Action Cable

Action Cable은 Rails 5의 새로운 프레임워크입니다. 이는 WebSockets를 Rails 애플리케이션의 나머지 부분과 seamlessly 통합합니다.

Action Cable을 통해 실시간 기능을 Ruby로 작성할 수 있으며, Rails 애플리케이션의 나머지 부분과 동일한 스타일과 형식으로 작성할 수 있습니다. 동시에 성능과 확장성도 보장됩니다. Action Cable은 클라이언트 측 JavaScript 프레임워크와 서버 측 Ruby 프레임워크를 모두 제공하는 완전한 스택 솔루션입니다. Active Record 또는 선택한 ORM을 통해 작성한 전체 도메인 모델에 액세스할 수 있습니다.

자세한 내용은 “Action Cable 개요” 가이드를 참조하세요.

API 애플리케이션

Rails를 사용하여 슬림화된 API 전용 애플리케이션을 만들 수 있습니다. 이는 Twitter나 GitHub API와 유사한 공개 API 및 사용자 정의 애플리케이션을 제공하는 데 유용합니다.

다음 명령어로 새로운 API Rails 앱을 생성할 수 있습니다:

$ rails new my_api --api

이 명령어는 다음과 같은 3가지 주요 작업을 수행합니다:

  • 일반 웹 애플리케이션에 주로 유용한 미들웨어(쿠키 지원 등)를 제외하고 더 제한적인 미들웨어 세트로 애플리케이션을 구성합니다.
  • ApplicationControllerActionController::API에서 상속하도록 변경합니다. 이를 통해 일반 웹 애플리케이션에 주로 사용되는 기능이 제외됩니다.
  • 새 리소스를 생성할 때 뷰, 헬퍼, 자산 생성을 건너뛰도록 생성기를 구성합니다.

이렇게 생성된 애플리케이션은 API 기반 애플리케이션의 기반이 되며, 필요에 따라 기능을 추가할 수 있습니다.

자세한 내용은 “Rails를 API 전용 애플리케이션에 사용하기” 가이드를 참조하세요.

Active Record 속성 API

모델에 유형이 지정된 속성을 정의할 수 있습니다. 필요한 경우 기존 속성의 유형을 재정의할 수 있습니다. 이를 통해 SQL에 값을 저장하고 불러올 때의 변환을 제어할 수 있습니다. 또한 ActiveRecord::Base.where에 전달되는 값의 동작을 변경하여, 구현 세부 사항에 의존하거나 monkey patching 없이도 도메인 객체를 Active Record 전반에 걸쳐 사용할 수 있습니다.

이를 통해 다음과 같은 작업을 수행할 수 있습니다:

  • Active Record가 감지한 유형을 재정의할 수 있습니다.
  • 기본값도 제공할 수 있습니다.
  • 데이터베이스 열에 매핑되지 않는 속성도 정의할 수 있습니다.
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# before
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # 사용자 정의 유형
  attribute :my_string, :string, default: "new default" # 기본값
  attribute :my_default_proc, :datetime, default: -> { Time.now } # 기본값
  attribute :field_without_db_column, :integer, array: true
end

# after
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

사용자 정의 유형 생성:

값 유형에 정의된 메서드에 응답하는 한, 사용자 정의 유형을 정의할 수 있습니다. 데이터베이스나 컨트롤러에서 받은 원시 입력을 deserialize 또는 cast 메서드로 호출하여 변환할 수 있습니다. 이는 화폐 데이터와 같은 사용자 정의 변환을 수행할 때 유용합니다.

쿼리:

ActiveRecord::Base.where가 호출되면 모델 클래스에 정의된 유형을 사용하여 값을 SQL로 변환하고, serialize 메서드를 호출합니다. 이를 통해 객체가 SQL 쿼리를 수행할 때 값을 변환하는 방법을 지정할 수 있습니다.

변경 추적:

속성 유형은 변경 추적 동작을 변경할 수 있습니다.

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

테스트 러너

Rails에서 테스트를 실행하는 기능을 향상시킨 새로운 테스트 러너가 도입되었습니다. 이 테스트 러너를 사용하려면 bin/rails test를 입력하면 됩니다.

테스트 러너는 RSpec, minitest-reporters, maxitest 등의 영향을 받았습니다. 다음과 같은 주요 기능을 포함합니다:

  • 테스트 라인 번호를 사용하여 단일 테스트 실행.
  • 테스트 라인 번호를 지정하여 여러 테스트 실행.
  • 실패 메시지 개선, 실패한 테스트를 쉽게 다시 실행할 수 있음.
  • -f 옵션을 사용하여 실패 시 즉시 테스트 중단, 전체 테스트 완료까지 기다리지 않음.
  • -d 옵션을 사용하여 전체 테스트 실행 완료 후 출력 지연.
  • -b 옵션을 사용하여 전체 예외 백트레이스 출력.
  • -s, -n, -v 등 minitest 옵션과의 통합.
  • 컬러 테스트 출력.

Railties

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

제거된 기능

  • 디버거 지원 제거, byebug 사용. debugger는 Ruby 2.2에서 지원되지 않습니다. (commit)

  • test:alltest:all:db 작업 제거. (commit)

  • Rails::Rack::LogTailer 제거. (commit)

  • RAILS_CACHE 상수 제거. (commit)

  • serve_static_assets 구성 제거. (commit)

  • doc:app, doc:rails, doc:guides 문서 작업 제거. (commit)

  • 기본 스택에서 Rack::ContentLength 미들웨어 제거. (Commit)

사용 중단

  • config.static_cache_controlconfig.public_file_server.headers로 대체. (Pull Request)

  • config.serve_static_filesconfig.public_file_server.enabled로 대체. (Pull Request)

  • rails 작업 네임스페이스의 작업을 app 네임스페이스로 대체. (예: rails:updaterails:template 작업이 app:updateapp:template로 변경됨.) (Pull Request)

주요 변경 사항

  • Rails 테스트 러너 bin/rails test 추가. (Pull Request)

  • 새로 생성된 애플리케이션과 플러그인에 Markdown 형식의 README.md 파일 추가. (commit, Pull Request)

  • bin/rails restart 작업 추가하여 tmp/restart.txt 파일을 터치하여 Rails 앱을 다시 시작할 수 있습니다. (Pull Request)

  • bin/rails initializers 작업 추가하여 Rails에 의해 호출되는 순서대로 모든 정의된 초기화기를 출력합니다. (Pull Request)

  • bin/rails dev:cache 추가하여 개발 모드에서 캐싱을 활성화 또는 비활성화할 수 있습니다. (Pull Request)

  • 개발 환경을 자동으로 업데이트하는 bin/update 스크립트 추가. (Pull Request)

  • Rake 작업을 bin/rails를 통해 프록시. (Pull Request, Pull Request)

  • 새로 생성된 애플리케이션에서 Linux와 macOS에서 이벤트 기반 파일 시스템 모니터가 기본적으로 활성화됩니다. --skip-listen 옵션을 사용하여 이 기능을 비활성화할 수 있습니다. (commit, commit)

  • RAILS_LOG_TO_STDOUT 환경 네, 번역을 계속하겠습니다.

  • RAILS_LOG_TO_STDOUT 환경 변수를 사용하여 프로덕션에서 로그를 STDOUT으로 기록하는 옵션이 추가되었습니다. (Pull Request)

  • 새로운 애플리케이션에 IncludeSubdomains 헤더가 포함된 HSTS가 활성화됩니다. (Pull Request)

  • 애플리케이션 생성기가 config/spring.rb 파일을 작성하여 Spring이 추가적인 일반적인 파일을 감시하도록 합니다. (commit)

  • 새 앱 생성 시 --skip-action-mailer 옵션을 추가하여 Action Mailer를 건너뛸 수 있습니다. (Pull Request)

  • tmp/sessions 디렉토리와 이와 관련된 clear rake 작업이 제거되었습니다. (Pull Request)

  • scaffold 생성기가 생성하는 _form.html.erb가 지역 변수를 사용하도록 변경되었습니다. (Pull Request)

  • 프로덕션 환경에서 클래스 자동 로드가 비활성화되었습니다. (commit)

Action Pack

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

제거된 기능

  • ActionDispatch::Request::Utils.deep_munge 제거. (commit)

  • ActionController::HideActions 제거. (Pull Request)

  • respond_torespond_with 플레이스홀더 메서드 제거, 이 기능은 responders gem으로 추출되었습니다. (commit)

  • deprecated 어설션 파일 제거. (commit)

  • URL 헬퍼의 문자열 키 사용 deprecated. (commit)

  • only_path 옵션 사용 deprecated. (commit)

  • NamedRouteCollection#helpers 사용 deprecated. (commit)

  • :to 옵션에 #을 포함하지 않는 경로 정의 사용 deprecated. (commit)

  • ActionDispatch::Response#to_ary 사용 deprecated. (commit)

  • ActionDispatch::Request#deep_munge 사용 deprecated. (commit)

  • ActionDispatch::Http::Parameters#symbolized_path_parameters 사용 deprecated. (commit)

  • 컨트롤러 테스트에서 use_route 옵션 사용 deprecated. (commit)

  • assignsassert_template 제거. 두 메서드 모두 rails-controller-testing gem으로 추출되었습니다. (Pull Request)

사용 중단

  • 모든 *_filter 콜백을 *_action 콜백으로 대체. (Pull Request)

  • *_via_redirect 통합 테스트 메서드 사용 중단. 대신 요청 호출 후 follow_redirect!를 수동으로 사용하세요. (Pull Request)

  • 개별 skipcallback 메서드로 `AbstractController#skipaction_callback` 사용 중단. (Pull Request)

  • render 메서드의 :nothing 옵션 사용 중단. (Pull Request)

  • head 메서드의 첫 번째 매개변수로 Hash를 전달하고 기본 상태 코드를 사용하는 것 사용 중단. (Pull Request)

  • 문자열이나 기호로 미들웨어 클래스 이름을 사용하는 것 사용 중단. 대신 클래스 이름을 사용하세요. (commit)

  • MIME 유형에 대한 상수 액세스(예: Mime::HTML) 사용 중단. 대신 기호 연산자(예: Mime[:html])를 사용하세요. (Pull Request)

  • redirect_to :backredirect_back으로 대체. redirect_back은 필수 fallback_location 인수를 받아 RedirectBackError가 발생할 가능성을 제거합니다. (Pull Request)

  • ActionDispatch::IntegrationTestActionController::TestCase에서 위치 인수 대신 키워드 인수 사용. (Pull Request)

  • :controller:action 경로 매개변수 사용 중단. (Pull Request)

  • 컨트롤러 인스턴스의 env 메서드 사용 중단. (commit)

  • ActionDispatch::ParamsParser가 사용 중단되었고 미들웨어 스택에서 제거되었습니다. 매개변수 파서를 구성하려면 ActionDispatch::Request.parameter_parsers=를 사용하세요. (commit, commit)

주요 변경 사항

  • 컨트롤러 작업 외부에서 임의의 템플릿을 렌더링할 수 있는 ActionController::Renderer가 추가되었습니다. (Pull Request)

  • ActionController::TestCaseActionDispatch::Integration HTTP 요청 메서드에 키워드 인수 구문으로 마이그레이션했습니다. (Pull Request)

  • http_cache_forever가 Action Controller에 추가되어 만료되지 않는 응답을 캐시할 수 있습니다. (Pull Request)

  • 요청 변형에 대한 더 친숙한 액세스 기능이 추가되었습니다. (Pull Request)

  • 해당 템플릿이 없는 작업의 경우 오류를 발생시키는 대신 head :no_content를 렌더링합니다. (Pull Request)

  • 컨트롤러별 기본 폼 빌더를 재정의할 수 있는 기능이 추가되었습니다. (Pull Request)

  • API 전용 앱을 위한 ActionController::API가 추가되었습니다. 이는 ActionController::Base의 대체제입니다. (Pull Request)

  • ActionController::Parameters가 더 이상 HashWithIndifferentAccess를 상속하지 않습니다. (Pull Request)

  • config.force_sslconfig.ssl_options를 더 안전하게 사용하고 쉽게 비활성화할 수 있도록 변경되었습니다. (Pull Request)

  • ActionDispatch::Static에서 임의의 헤더를 반환할 수 있는 기능이 추가되었습니다. (Pull Request)

  • protect_from_forgery 선행 기본값이 false로 변경되었습니다. (commit)

  • ActionController::TestCase는 Rails 5.1에서 별도의 gem으로 이동될 예정입니다. 대신 ActionDispatch::IntegrationTest를 사용하세요. (commit)

  • Rails에서 기본적으로 약한 ETags를 생성합니다. (Pull Request)

  • 명시적인 render 호출이 없고 해당 템플릿이 없는 컨트롤러 작업은 오류를 발생시키는 대신 암시적으로 head :no_content를 렌더링합니다. (Pull Request 1, 2)

  • 폼별 CSRF 토큰 옵션이 추가되었습니다. (Pull Request)

  • 통합 테스트에 요청 인코딩 및 응답 구문 분석이 추가되었습니다. (Pull Request)

  • 컨트롤러 수준에서 뷰 컨텍스트에 액세스할 수 있는 ActionController#helpers가 추가되었습니다. (Pull Request)

  • 세션에 저장되기 전에 폐기된 플래시 메시지가 제거됩니다. (Pull Request)

  • fresh_whenstale?에 레코드 컬렉션을 전달할 수 있는 기능이 추가되었습니다. (Pull Request)

  • ActionController::LiveActiveSupport::Concern이 되었습니다. 이는 다른 모듈에 포함되려면 ActiveSupport::Concern 또는 ActionController::Live로 확장되어야 함을 의미합니다. 일부 사람들은 Warden/Devise 인증 실패 처리 코드를 포함하는 다른 모듈을 사용하고 있었는데, 이는 스폰서된 스레드에서 :warden이 throw되는 경우 미들웨어가 잡을 수 없기 때문입니다. (자세한 내용은 이 이슈 참조)

  • Response#strong_etag=#weak_etag=와 이에 대응하는 fresh_whenstale? 옵션이 추가되었습니다. (Pull Request)

Action View

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

제거된 기능

  • `Abstract네, 번역을 계속하겠습니다.

Action View

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

제거된 기능

  • AbstractController::Base::parent_prefixes 제거. (commit)

  • ActionView::Helpers::RecordTagHelper 제거, 이 기능은 recordtaghelper gem으로 추출되었습니다. (Pull Request)

  • translate 헬퍼의 :rescue_format 옵션 제거, I18n에서 더 이상 지원되지 않습니다. (Pull Request)

주요 변경 사항

  • 기본 템플릿 핸들러가 ERB에서 Raw로 변경되었습니다. (commit)

  • 컬렉션 렌더링이 여러 부분 템플릿을 한 번에 캐시하고 가져올 수 있습니다. (Pull Request, commit)

  • 명시적 종속성에 와일드카드 일치가 추가되었습니다. (Pull Request)

  • 제출 태그의 기본 동작이 disable_with로 변경되었습니다. 이를 통해 중복 제출을 방지할 수 있습니다. (Pull Request)

  • 부분 템플릿 이름이 더 이상 유효한 Ruby 식별자일 필요가 없습니다. (commit)

  • datetime_tag 헬퍼가 이제 datetime-local 유형의 입력 태그를 생성합니다. (Pull Request)

  • render partial: 헬퍼에 블록을 사용할 수 있습니다. (Pull Request)

Action Mailer

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

제거된 기능

  • 이메일 뷰의 *_path 헬퍼 제거. (commit)

  • deliverdeliver! 메서드 제거. (commit)

주요 변경 사항

  • 템플릿 조회 시 기본 로케일 및 I18n 폴백을 고려합니다. (commit)

  • 컨트롤러와 작업에 사용되는 명명 규칙과 일치하도록 생성기를 통해 만들어진 메일러에 _mailer 접미사가 추가되었습니다. (Pull Request)

  • assert_enqueued_emailsassert_no_enqueued_emails가 추가되었습니다. (Pull Request)

  • config.action_mailer.deliver_later_queue_name 구성을 추가하여 메일러 대기열 이름을 설정할 수 있습니다. (Pull Request)

  • Action Mailer 뷰에서 조각 캐싱을 지원하도록 추가되었습니다. config.action_mailer.perform_caching 구성 옵션을 추가하여 템플릿의 캐싱 여부를 결정할 수 있습니다. (Pull Request)

Active Record

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

제거된 기능

  • 중첩된 배열을 쿼리 값으로 전달하는 기능 제거. (Pull Request)

  • ActiveRecord::Tasks::DatabaseTasks#load_schemaActiveRecord::Tasks::DatabaseTasks#load_schema_for로 대체되었습니다. (commit)

  • serialized_attributes 제거. (commit)

  • has_many :through의 자동 카운터 캐시 제거. (commit)

  • sanitize_sql_hash_for_conditions 제거. (commit)

  • Reflection#source_macro 제거. (commit)

  • symbolized_base_classsymbolized_sti_name 제거. (commit)

  • ActiveRecord::Base.disable_implicit_join_references= 제거. (commit)

  • 문자열 액세서를 사용한 연결 사양 액세스 제거. (commit)

  • 인스턴스 종속 연관 관계 사전 로드 지원 제거. (commit)

  • 배타적 하한 경계가 있는 PostgreSQL 범위 지원 제거. (commit)

  • 캐시된 Arel로 관계를 수정할 때의 deprecation이 제거되었습니다. 대신 ImmutableRelation 오류가 발생합니다. (commit)

  • 코어에서 ActiveRecord::Serialization::XmlSerializer가 제거되었습니다. 이 기능은 activemodel-serializers-xml gem으로 추출되었습니다. (Pull Request)

  • 코어에서 레거시 mysql 데이터베이스 어댑터 지원이 제거되었습니다. 대부분의 사용자는 mysql2를 사용할 수 있습니다. 이는 유지 관리할 사람을 찾으면 별도의 gem으로 변환될 것입니다. (Pull Request 1, Pull Request 2)

  • protected_attributes gem 지원이 제거되었습니다. (commit)

  • 9.1 버전 미만의 PostgreSQL 지원이 제거되었습니다. (Pull Request)

  • activerecord-deprecated_finders gem 지원이 제거되었습니다. (commit)

  • ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES 상수가 제거되었습니다. (commit)

사용 중단

  • 쿼리에 클래스를 값으로 전달하는 것이 사용 중단되었습니다. 대신 문자열을 전달해야 합니다. (Pull Request)

  • Active Record 콜백 체인을 중단하기 위해 false를 반환하는 것이 사용 중단되었습니다. 권장되는 방법은 throw(:abort)입니다. (Pull Request)

  • ActiveRecord::Base.errors_in_transactional_callbacks= 사용 중단. (commit)

  • Relation#uniq 대신 Relation#distinct 사용. (commit)

  • PostgreSQL :point 유형이 Point 객체를 반환하는 새로운 유형으로 대체되었습니다. (Pull Request)

  • 연관 관계 메서드에 truthy 인수를 전달하여 강제로 연관 관계 다시 로드하는 것이 사용 중단되었습니다. (Pull Request)

  • 연관 관계 restrict_dependent_destroy 오류의 키가 새로운 키 이름으로 대체되었습니다. (Pull Request)

  • #tables의 동작을 동기화했습니다. (Pull Request)

  • SchemaCache#tables, SchemaCache#table_exists?, SchemaCache#clear_table_cache!가 새로운 데이터 소스 대응 메서드로 대체되었습니다. (Pull Request)

  • SQLite3 및 MySQL 어댑터의 connection.tables가 사용 중단되었습니다. (Pull Request)

  • #tables에 인수를 전달하는 것이 사용 중단되었습니다. #tables 메서드는 일부 어댑터(mysql2, sqlite3)에서 테이블과 뷰를 모두 반환했지만, 다른 어댑터(postgresql)에서는 테이블만 반환했습니다. 이를 일관되게 하기 위해 #tables는 앞으로 테이블만 반환할 것입니다. (Pull Request)

  • table_exists? 사용 중단 - #table_exists? 메서드는 테이블과 뷰를 모두 확인했습니다. #tables와 일관되게 하기 위해 #table_exists?는 앞으로 테이블만 확인할 것입니다. (Pull Request)

  • find_nthoffset 인수를 전송하는 것이 사용 중단되었습니다. 대신 관계의 offset 메서드를 사용하세요. (Pull Request)

  • DatabaseStatements{insert|update|delete}_sql가 사용 중단되었습니다. 대신 공개 메서드 {insert|update|delete}를 사용하세요. (Pull Request)

  • use_transactional_fixturesuse_transactional_tests로 대체되어 더 명확해졌습니다. (Pull Request)

  • ActiveRecord::Connection#quote에 열을 전달하는 것이 사용 중단되었습니다. (commit)

  • find_in_batchesend 옵션이 추가되어 start 매개변수와 함께 배치 처리를 중지할 위치를 지정할 수 있습니다. (Pull Request)

주요 변경 사항

  • 테이블 생성 시 `foreign네, 번역을 계속하겠습니다.

Active Record

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

주요 변경 사항

  • 테이블 생성 시 foreign_key 옵션이 추가되었습니다. (commit)

  • 새로운 속성 API. (commit)

  • enum 정의에 :_prefix/:_suffix 옵션이 추가되었습니다. (Pull Request, Pull Request)

  • ActiveRecord::Relation#cache_key가 추가되었습니다. (Pull Request)

  • timestamps의 기본 null 값이 false로 변경되었습니다. (commit)

  • ActiveRecord::SecureToken이 추가되어 SecureRandom을 사용하여 모델의 고유 토큰을 생성할 수 있습니다. (Pull Request)

  • drop_table:if_exists 옵션이 추가되었습니다. (Pull Request)

  • ActiveRecord::Base#accessed_fields가 추가되어 모델에서 읽은 필드를 빠르게 확인할 수 있습니다. (commit)

  • ActiveRecord::Relation#or 메서드가 추가되어 OR 연산자를 사용하여 WHERE 또는 HAVING 절을 결합할 수 있습니다. (commit)

  • ActiveRecord::Base.suppress가 추가되어 주어진 블록 동안 수신기가 저장되지 않도록 할 수 있습니다. (Pull Request)

  • belongs_to가 기본적으로 연관 관계가 없는 경우 유효성 검사 오류를 발생시킵니다. 이는 개별 연관 관계 기반으로 optional: true를 사용하여 끌 수 있습니다. 또한 belongs_torequired 옵션이 optional로 대체되었습니다. (Pull Request)

  • db:structure:dump 동작을 구성하는 config.active_record.dump_schemas 옵션이 추가되었습니다. (Pull Request)

  • config.active_record.warn_on_records_fetched_greater_than 옵션이 추가되었습니다. (Pull Request)

  • MySQL에 네이티브 JSON 데이터 유형 지원이 추가되었습니다. (Pull Request)

  • PostgreSQL에서 인덱스를 동시에 삭제하는 기능이 추가되었습니다. (Pull Request)

  • 연결 어댑터에 #views#view_exists? 메서드가 추가되었습니다. (Pull Request)

  • ActiveRecord::Base.ignored_columns가 추가되어 일부 열을 Active Record에서 숨길 수 있습니다. (Pull Request)

  • connection.data_sourcesconnection.data_source_exists?가 추가되었습니다. 이 메서드는 Active Record 모델을 지원할 수 있는 관계(일반적으로 테이블과 뷰)를 결정합니다. (Pull Request)

  • YAML 파일에서 모델 클래스를 설정할 수 있도록 fixtures 파일이 변경되었습니다. (Pull Request)

  • 데이터베이스 마이그레이션 생성 시 기본 키로 uuid를 사용할 수 있는 기능이 추가되었습니다. (Pull Request)

  • ActiveRecord::Relation#left_joinsActiveRecord::Relation#left_outer_joins가 추가되었습니다. (Pull Request)

  • after_{create,update,delete}_commit 콜백이 추가되었습니다. (Pull Request)

  • 기존 마이그레이션을 중단하지 않고 매개변수 기본값을 변경할 수 있도록 마이그레이션 클래스에 제공되는 API 버전이 추가되었습니다. (Pull Request)

  • ApplicationRecord가 추가되어 모든 앱 모델의 새로운 상위 클래스가 되었습니다. 이를 통해 앱 전체의 모델 동작을 구성할 수 있습니다. (Pull Request)

  • ActiveRecord#second_to_last#third_to_last 메서드가 추가되었습니다. (Pull Request)

  • PostgreSQL 및 MySQL에서 데이터베이스 객체(테이블, 열, 인덱스)에 주석을 추가할 수 있는 기능이 추가되었습니다. (Pull Request)

  • mysql2 어댑터에 준비된 문을 지원하도록 추가되었습니다. 이전에는 이 기능이 deprecated된 mysql 레거시 어댑터에서만 지원되었습니다. 활성화하려면 config/database.ymlprepared_statements: true를 설정하세요. (Pull Request)

  • ActiveRecord::Relation#update를 호출하면 관계 내의 모든 객체에 대해 유효성 검사와 콜백이 실행됩니다. (Pull Request)

  • save 메서드에 :touch 옵션이 추가되어 타임스탬프를 업데이트하지 않고 레코드를 저장할 수 있습니다. (Pull Request)

  • PostgreSQL에 표현식 인덱스와 연산자 클래스 지원이 추가되었습니다. (commit)

  • 중첩 속성에 인덱스 오류를 추가하는 :index_errors 옵션이 추가되었습니다. (Pull Request)

  • 양방향 삭제 종속성 지원이 추가되었습니다. (Pull Request)

  • 트랜잭션 테스트에서 after_commit 콜백 지원이 추가되었습니다. (Pull Request)

  • 테이블에 외래 키가 존재하는지 확인하는 foreign_key_exists? 메서드가 추가되었습니다. (Pull Request)

  • touch 메서드에 time 옵션이 추가되어 현재 시간이 아닌 다른 시간으로 레코드를 터치할 수 있습니다. (Pull Request)

  • 트랜잭션 콜백에서 발생한 오류가 더 이상 무시되지 않고 버블링됩니다. 이전에는 (새로 deprecated된) raise_in_transactional_callbacks = true 옵션을 사용하지 않는 한 이러한 오류가 로그에 기록되고 무시되었습니다. (commit)

Active Model

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

제거된 기능

사용 중단

  • Active Model 및 ActiveModel::Validations 콜백 체인을 중단하기 위해 false를 반환하는 것이 사용 중단되었습니다. 권장되는 방법은 throw(:abort)입니다. (Pull Request)

  • ActiveModel::Errors#get, ActiveModel::Errors#set, ActiveModel::Errors#[]= 메서드의 일관성 없는 동작이 사용 중단되었습니다. (Pull Request)

  • validates_length_of:tokenizer 옵션이 일반 Ruby로 대체되었습니다. (Pull Request)

  • ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blank가 대체 없이 사용 중단되었습니다. (Pull Request)

주요 변경 사항

  • ActiveModel::Errors#details가 추가되어 어떤 유효성 검사기가 실패했는지 확인할 수 있습니다. (Pull Request)

  • ActiveRecord::AttributeAssignmentActiveModel::AttributeAssignment로 추출되어 포함 가능한 모듈로 사용할 수 있습니다. (Pull Request)

  • ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_change가 추가되어 모델이 저장된 후에도 기록된 변경 사항에 액세스할 수 있습니다. (Pull Request)

  • valid?invalid?에서 한 번에 여러 컨텍스트를 검증할 수 있습니다. (Pull Request)

  • validates_acceptance_of1 외에도 true를 기본값으로 허용하도록 변경되었습니다. (Pull Request)

Active Job

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

주요 변경 사항

  • ActiveJob::Base.deserialize가 작업 클래스에 위임됩니다. 이를 통해 작업이 직렬화될 때 임의의 메타데이터를 첨부하고 수행될 때 다시 읽을 수 있습니다. (Pull Request)

  • 작업별로 큐 어댑터를 구성할 수 있는 기능이 추가되었습니다. (Pull Request)

  • 생성된 작업이 기본적으로 app/jobs/application_job.rb에서 상속됩니다. (Pull Request)

  • DelayedJob, Sidekiq, qu, que, queue_classicActiveJob::Baseprovider_job_id로 작업 ID를 보고할 수 있습니다. ([Pull Request](https://github.com/rails/rails/pull/20네, 번역을 계속하겠습니다.

Active Job

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

주요 변경 사항

  • DelayedJob, Sidekiq, qu, que, queue_classicActiveJob::Baseprovider_job_id로 작업 ID를 보고할 수 있습니다. (Pull Request, Pull Request, commit)

  • concurrent-ruby 스레드 풀에 작업을 큐잉하는 간단한 AsyncJob 프로세서와 관련 AsyncAdapter를 구현했습니다. (Pull Request)

  • 기본 어댑터를 인라인에서 비동기로 변경했습니다. 이는 테스트에서 동기적으로 발생하는 동작에 의존하지 않도록 하는 더 나은 기본값입니다. (commit)

Active Support

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

제거된 기능

  • ActiveSupport::JSON::Encoding::CircularReferenceError 제거. (commit)

  • ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=ActiveSupport::JSON::Encoding.encode_big_decimal_as_string 제거. (commit)

  • ActiveSupport::SafeBuffer#prepend 제거. (commit)

  • Kernelsilence_stderr, silence_stream, capture, quietly 메서드 제거. (commit)

  • active_support/core_ext/big_decimal/yaml_conversions 파일 제거. (commit)

  • ActiveSupport::Cache::Store.instrumentActiveSupport::Cache::Store.instrument= 제거. (commit)

  • Class#superclass_delegating_accessor 제거. 대신 Class#class_attribute를 사용하세요. (Pull Request)

  • ThreadSafe::Cache가 제거되었습니다. 대신 Concurrent::Map을 사용하세요. (Pull Request)

  • Ruby 2.2에서 구현된 Object#itself가 제거되었습니다. (Pull Request)

사용 중단

  • MissingSourceFileLoadError로 대체되었습니다. (commit)

  • Ruby 2.0에 도입된 Module#prepend를 사용하도록 alias_method_chain이 사용 중단되었습니다. (Pull Request)

  • ActiveSupport::Concurrency::LatchConcurrent::CountDownLatch(concurrent-ruby)로 대체되었습니다. (Pull Request)

  • number_to_human_size:prefix 옵션이 대체 없이 사용 중단되었습니다. (Pull Request)

  • Module#qualified_const_가 기본 제공 Module#const_ 메서드로 대체되었습니다. (Pull Request)

  • 콜백을 정의할 때 문자열을 전달하는 것이 사용 중단되었습니다. (Pull Request)

  • ActiveSupport::Cache::Store#namespaced_key, ActiveSupport::Cache::MemCachedStore#escape_key, ActiveSupport::Cache::FileStore#key_file_path가 사용 중단되었습니다. 대신 normalize_key를 사용하세요. (Pull Request, commit)

  • ActiveSupport::Cache::LocaleCache#set_cache_valuewrite_cache_value로 대체되었습니다. (Pull Request)

  • assert_nothing_raised에 인수를 전달하는 것이 사용 중단되었습니다. (Pull Request)

  • Module.local_constantsModule.constants(false)로 대체되었습니다. (Pull Request)

주요 변경 사항

  • ActiveSupport::MessageVerifier#verified#valid_message? 메서드가 추가되었습니다. (Pull Request)

  • 콜백 체인을 중단하는 방법이 변경되었습니다. 이제 명시적으로 throw(:abort)를 사용하는 것이 권장됩니다. (Pull Request)

  • config.active_support.halt_callback_chains_on_return_false 구성 옵션이 추가되어 Active Record, Active Model, Active Model::Validations 콜백 체인이 ‘before’ 콜백에서 false를 반환하여 중단될 수 있는지 여부를 지정할 수 있습니다. (Pull Request)

  • 기본 테스트 순서가 :sorted에서 :random으로 변경되었습니다. (commit)

  • Date, Time, DateTime#on_weekend?, #on_weekday?, #next_weekday, #prev_weekday 메서드가 추가되었습니다. (Pull Request, Pull Request)

  • Date, Time, DateTime#next_week#prev_weeksame_time 옵션이 추가되었습니다. (Pull Request)

  • Date, Time, DateTime#prev_day#next_day가 추가되었습니다. (Pull Request)

  • base58 문자열 생성을 위한 SecureRandom.base58이 추가되었습니다. (commit)

  • ActiveSupport::TestCasefile_fixture가 추가되었습니다. 이를 통해 테스트 케이스에서 샘플 파일에 쉽게 액세스할 수 있습니다. (Pull Request)

  • EnumerableArray에 지정된 요소를 제외한 사본을 반환하는 #without이 추가되었습니다. (Pull Request)

  • ActiveSupport::ArrayInquirerArray#inquiry가 추가되었습니다. (Pull Request)

  • ActiveSupport::TimeZone#strptime이 추가되어 주어진 타임존에서 시간을 구문 분석할 수 있습니다. (commit)

  • Integer#positive?Integer#negative? 쿼리 메서드가 추가되었습니다. (commit)

  • ActiveSupport::OrderedOptions 가져오기 메서드에 뱅 버전이 추가되어 값이 .blank?인 경우 KeyError를 발생시킵니다. (Pull Request)

  • Time.days_in_year가 추가되어 주어진 연도 또는 현재 연도의 일수를 반환합니다. (commit)

  • 애플리케이션 소스 코드, 라우트, 로케일 등의 변경 사항을 비동기적으로 감지하는 이벤트 기반 파일 감시기가 추가되었습니다. (Pull Request)

  • 스레드별 클래스 및 모듈 변수를 선언하는 thread_m/cattr_accessor/reader/writer 메서드 모음이 추가되었습니다. (Pull Request)

  • Array#second_to_lastArray#third_to_last 메서드가 추가되었습니다. (Pull Request)

  • 구성 요소와 라이브러리가 애플리케이션 코드 실행 및 애플리케이션 재로드 프로세스를 관리하고 참여할 수 있도록 ActiveSupport::ExecutorActiveSupport::Reloader API가 공개되었습니다. (Pull Request)

  • ActiveSupport::Duration이 ISO8601 형식의 지원을 추가했습니다. (Pull Request)

  • ActiveSupport::JSON.decodeparse_json_times가 활성화된 경우 ISO8601 로컬 시간 구문 분석을 지원합니다. (Pull Request)

  • ActiveSupport::JSON.decode가 날짜 문자열에 대해 Date 객체를 반환합니다. (Pull Request)

  • TaggedLogging에 로거가 서로 태그를 공유하지 않도록 여러 번 인스턴스화될 수 있는 기능이 추가되었습니다. (Pull Request)

크레딧

Rails에 많은 시간을 보내 안정적이고 강력한 프레임워크로 만든 많은 기여자의 전체 목록을 참조하세요. 모든 분들께 박수를 보냅니다.