5.1
원본: http://guides.rubyonrails.org/5_1_release_notes.html
Ruby on Rails 5.1 릴리즈 노트
레일즈 5.1 하이라이트:
Yarn 지원
선택적 Webpack 지원
기본 의존성에서 jQuery 제외
시스템 테스트
암호화된 시크릿
메일러 매개변수
Direct & Resolved 라우트
form_for
와form_tag
를form_with
으로 통합
이 릴리즈 노트에는 주요 변경점만 포함됩니다. 더 다양한 변경점과 버그 수정을 보려면 GitHub에서 Rails 메인 저장소의 커밋 목록이나 변경 로그를 확인하세요.
레일즈 5.1로 업그레이드하기
기존 애플리케이션을 업그레이드하기 전에 충분한 테스트 커버리지를 확보하는 것이 좋습니다. 애플리케이션이 레일즈 5.0로 업그레이드하지 않았다면 우선 업그레이드하고, 애플리케이션이 정상적으로 동작하는지 충분히 확인한 뒤에 레일즈 5.1로 올려주세요. 업그레이드 시 주의점에 대해서는 Ruby on Rails 업그레이드 가이드를 참고해주세요.
주요 변경점
Yarn 지원
레일즈 5.1에선 Yarn을 이용해 NPM에 있는 자바스크립트 의존성을 관리할 수 있어 React나 VueJS 같은 NPM 라이브러리를 사용하는 것이 쉬워졌습니다. Yarn으로 설치한 의존성들은 에셋 파이프라인에 통합되서 자연스럽게 사용할 수 있습니다.
선택적 Webpack 지원
레일즈 앱을 Webpacker를 사용해 쉽게 Webpack과 통합할 수 있습니다. 새로운 앱을 생성할 때 --webpack
플래그를 사용하면 자동으로 활성화됩니다.
기존 에셋 파이프라인과 완벽하게 호환되어서 이미지, 폰트, 사운드 등의 에셋을 사용하거나, 기존 에셋 파이프라인에서 관리되는 자바스크립트 코드와 웹팩으로 처리하는 코드를 함께 사용해도 문제가 없습니다. 모든 에셋이 기본적으로 Yarn을 통해 관리됩니다.
기본 의존성에서 jQuery 제외
기존 레일즈에서는 jQuery가 data-remote
, data-confirm
같은 UJS(Rails' Unobtrusive JavaScript) 기능을 위해 기본적으로 요구되었습니다. 이제는 UJS가 바닐라 자바스크립트로 재작성되어서 더 이상 필요하지 않게 되었습니다. 이 코드는 액션 뷰에 rails-ujs
라는 이름으로 탑재되었습니다.
시스템 테스트
레일즈 5.1은 시스템 테스트 형태로 Capybara 테스트를 작성을 지원합니다. 더 이상 테스트를 위한 Capybara 설정과 데이터베이스 관리 잔략을 걱정하지 않아도 됩니다. 레일즈 5.1은 Chrome에서 테스트를 실행하고 실패 스크린샷과 같은 기능을 위한 래퍼를 제공합니다.
암호화된 시크릿
레일즈는 이제 애플리케이션 시크릿을 sekrets 잼과 비슷한 안전한 방식으로 관리합니다.
bin/rails secrets:setup
을 실행해서 새로운 암호화된 시크릿 파일을 생성합니다. 여기서 생성되는 마스터 키 파일은 반드시 리포지토리 바깥에 저장해야합니다. 시크릿 자체는 암호화 된 형태로 안전하게 버전 관리 시스템에 체크인 할 수 있습니다.
시크릿은 프로뎍션에서 RAILS_MASTER_KEY
환경 변수나 키 파일에 저장된 키를 사용해 복호화할 수 있습니다.
메일러 매개변수
메일러 클래스의 모든 메소드에서 공유하기 위해 인스턴스 변수, 헤더 및 기타 공통 설정을 공통 파라미터로 지정할 수 있습니다.
Direct & Resolved 라우트
Pull Request
레일즈 5.1에 resolve
와 direct
라는 라우팅 DSL이 추가되었습니다. resolve
메서드를 사용하면 모델의 다형성 매핑을 커스텀으로 지정할 수 있습니다.
이 코드는 /basket/:id
대신 /basket
단일 URL을 생성합니다.
direct
메서드로 커스텀 URL 헬퍼를 지정할 수 있습니다.
블록의 반환 값은 반드시 문자열 URL, 해시, 배열, 액티브 모델 인스턴스, 액티브 모델 클래스 같이 url_for
메서드의 인자로 유효한 값 이여야 합니다.
form_for
와 form_tag
를 form_with
으로 통합
form_for
와 form_tag
를 form_with
으로 통합레일즈 5.1 이전에는 HTML 폼을 처리하기 위해 모델 인스턴스용 form_for
와 커스텀 URL용 form_tag
, 두 개의 인터페이스가 있었습니다.
레일즈 5.1은 두 개의 인터페이스를 form_with
으로 합쳐서 하나의 인터페이스로 URL, 스코프, 모델 기반 폼 태그를 생성할 수 있습니다.
URL을 사용할 때:
스코프 접두사를 입력 필드 이름에 추가:
기존 모델로 업데이트 폼을 만들고 필드 값 채우기:
비호환성
다음 변경사항들은 업그레이드할 때 바로 적용해야 합니다.
여러 연결을 이용하는 트랜잭션 테스트
트랜잭션 테스트는 이제 데이터베이스 트랜잭션 상의 모든 액티브 레코드 연결을 래핑합니다.
테스트가 추가 스레드들을 생성할 때, 이 스레드들이 확보하는 데이터베이스 연결은 이제 특수한 방식으로 처리됩니다.
스레드들이 매니지드 트랜잭션 내부의 단일 연결을 공유하므로써 모든 스레드가 같은 상태의 데이터베이스를 보게 하고, 트랜잭션 외부 영향을 무시하게 됩니다. 이전에는 추가 스레드의 연결을 통해 픽스쳐의 행을 수정할 수가 없었습니다.
이 중 스레드가 중첩 트랜잭션에 진입하면, 격리 상태를 유지하기 위해 연결을 일시적으로 독점 사용하게 됩니다.
만약 테스트가 현재 분리적이거나, 트랜잭션 바깥 영역 또는 추가 스레드를 스폰에 의존적이라면 명시적인 트랜잭션 연결 관리 방식으로 전환해야 합니다.
만약 테스트가 추가적인 스레드를 스폰하고 그 스레드에서 명시적 데이터베이스 트랜잭션을 사용하며 상호작용하고 있다면, 이 변경점이 데드락을 유발할 수 있습니다.
이 문제를 방지하는 가장 쉬운 방법은 영향을 받는 모든 테스트 케이스에서 트랜잭션 테스트를 비활성화 하는 것입니다.
Railties
자세한 변경사항은 변경로그를 참고하세요.
제거된 것
config.static_cache_control
가 제거되었습니다. (Commit)config.serve_static_files
가 제거되었습니다. (Commit)rails/rack/debugger
파일이 제거되었습니다. (Commit)rails:update
,rails:template
,rails:template:copy
,rails:update:configs
,rails:update:bin
태스크 제거되었습니다. (Commit)routes
태스크에서CONTROLLER
환경 변수가 제거되었습니다. (Commit)rails new
커맨드에서-j
(--javascript
) 옵션이 제거되었습니다. (Pull Request)
주요 변경점
config/secrets.yml
파일에 모든 환경에서 로드될 공유 섹션 추가되었습니다. (Commit)이제
config/secrets.yml
파일의 모든 키가 심볼로 로드됩니다. (Pull Request)기본 스택에서
jquery-rails
가 제거되었습니다. 액션 뷰와 함께 제공되는rails-ujs
가 기본 UJS 어댑터로 포함되어있습니다. (Pull Request)새 앱에서 Yarn 지원이 추가되어 Yarn binstub과
package.json
을 사용할 수 있습니다. (Pull Request)새 앱에서
--webpack
옵션으로 rails/webpacker 잼을 통해 Webpack 지원을 추가할 수 있습니다. (Pull Request)config/secrets.yml.enc
에 암호화된 시크릿이 추가됩니다. (Pull Request)rails initializers
로 이니셜라이져 클래스 이름을 표시합니다. (Pull Request)
Action Cable
자세한 변경사항은 변경로그를 참조하세요.
주요 변경점
여러 애플리케이션에서 같은 레디스 서버를 사용할 때 이름 충돌을 피하기 위해
cable.yml
파일의 레디스 어댑터에channel_prefix
지원이 추가되었습니다. (Pull Request)데이터 브로드캐스팅을 위해
ActiveSupport:Notifications
훅을 추가할 수 있습니다. (Pull Request)
Action Pack
자세한 변경사항은 변경로그를 참하세요.
제거된 것
ActionDispatch::Callbacks.to_prepare
와ActionDispatch::Callbacks.to_cleanup
이 제거되었습니다. (Commit)컨트롤러 필터 관련 Deprecated 되었던 메서드들이 제거되었습니다. (Commit)
ActionCotroller::Parameters
에서HashWithIndifferentAccess
메서드를 더 이상 호출 할 수 없습니다. (Commit)
Deprecations
config.action_controller.raise_on_unfiltered_parameters
가 Deprecated 되었습니다. Rails 5.1에선 아무 영향이 없습니다. (Commit)
주요 변경점
direct
와resolve
메서드가 라우팅 DSL에 추가되었습니다. (Pull Request)애플리케이션 시스템 테스트 작성을 위한
ActionDispatch::SystemTestCase
클래스가 새로 추가되었습니다. (Pull Request)
Action View
자세한 변경사항은 변경로그를 참하세요.
제거된 것
ActionView::Template::Error
에서#original_exception
이 제거되었습니다. (Commit)strip_tags
에서 잘못 명명된encode_special_chars
옵션이 제거되었습니다. (Pull Request)
Deprecations
ERB 핸들러로 Erubis 대신 Erubi를 사용합니다. (Pull Request)
주요 변경점
원시 템플릿 핸들러(레일즈 5의 기본 템플릿 핸들러)는 이제 HTML-safe한 문자열을 출력합니다. (commit)
datetime_field
와datetime_field_tag
가datetime-local
필드를 생성하도록 변경되었습니다. (Pull Request)HTML 태그를 위한 빌더 스타일 문법이 추가되었습니다. (tag.div, tag.br 등) (Pull Request)
form_tag
와form_for
사용법이 통합된form_with
이 추가되었습니다. (Pull Request)current_page?
에check_parameters
옵션이 추가되었습니다. (Pull Request)
Action Mailer
자세한 변경사항은 변경로그를 참고하세요.
주요 변경점
첨부파일이 포함되어있고 본문이 인라인으로 설정된 경우 커스텀 컨텐츠 타입을 설정할 수 있습니다. (Pull Request)
default
메서드의 인자로 람다를 사용할 수 있습니다. (Commit)여러 메일러 액션에서
before
필터와default
를 공유하기 위한 매개변수화된 호출이 지원됩니다. (Commit)process.action_mailer
이벤트에 메일러 액션이 받은 인자를args
키로 전달합니다. (Pull Request)
Active Record
자세한 변경사항은 변경로그를 참고하세요.
제거된 것
ActiveRecord::QueryMethods#select
에 인자와 블록을 동시에 전달할 수 없습니다. (Commit)activerecord.errors.messages.restrict_dependent_destroy.one
,activerecord.errors.messages.restrict_dependent_destroy.many
i18n 스코프가 제거되었습니다. (Commit)관계 리더에서 강제 리로드 옵션이 제거되었습니다. (Commit)
#quote
에 column 전달 기능이 제거되었습니다. (Commit)#tables
에서 name 인자가 제거되었습니다. (Commit)테이블과 뷰를 반환하던
#tables
,#table_exists?
가 테이블만 반환하도록 변경되었습니다. (Commit)ActiveRecord::StatementInvalid#initialize
와ActiveRecord::StatementInvalid#original_exception
에서original_exception
인자가 제거되었습니다. (Commit)이제 쿼리에서 클래스를 값으로 전달할 수 없습니다. (Commit)
이제 LIMIT 쿼리에서 쉼표를 사용할 수 없습니다. (Commit)
#destroy_all
에서conditions
매개변수가 제거되었습니다. (Commit)#delete_all
에서conditions
매개변수가 제거되었습니다. (Commit)#load_schema_for
메서드가 제거되었습니다. (Commit)#rails_in_transactional_callbacks
구성이 제거되었습니다. (Commit)#use_transactional_fixtures
구성이 제거되었습니다. (Commit)
Deprecations
error_on_ignored_order_or_limit
플래그가 Deprecated 되었습니다. (Commitsanitize_conditions
가 Deprecated 되었습니다. (Pull Request)연결 어댑터의
support_migrations?
가 Deprecated 되었습니다. (Pull Request)Migrator.schema_migrations_table_name
이 Deprecated 되었습니다.SchemaMigration.table_name
을 대신 사용하세요. (Pull Request)Quoting과 형변환에서
#quoted_id
사용이 Deprecated 되었습니다. (Pull Request)#index_name_exists?
의default
인자가 Deprecated 되었습니다. (Pull Request)
주요 변경점
기본 키의 기본 형식이 BIGINT로 변경되었습니다. (Pull Request)
MySQL 5.7.5+, MariaDB 5.2.0+의 가상 컬럼이 지원됩니다. (Commit)
배치 프로세싱에서
limit
이 지원됩니다. (Commit)이제 트랜잭션 테스트가 데이터베이스 트랜잭션의 모든 액티브 레코드 연결을 래핑합니다. (Pull Request)
기본적으로
mysqldump
명령의 출력에서 주석을 건더뜁니다. (Pull Request)ActiveRecord::Relation#count
에 블록이 전달됐을 때, 블록을 무시하는 대신 루비의Enumerable#count
를 사용하도록 수정됐습니다. (Pull Request)psql
커맨드에"-v ON_ERROR_STOP=1"
플래그를 사용해서 SQL 에러가 표시되지 않도록 할 수 있습니다. (Pull Request)ActiveRecord::Base.connection_pool.stat
이 추가되었습니다. (Pull Request)ActiveRecord::Migration
클래스를 직접 상속하면 에러를 일으킵니다. 마이그레이션 작성에 사용한 레일즈 버전을 지정하세요. (Commit)through
관계에서 모호한 리플렉션 이름을 사용하면 에러를 일으킵니다. (Commit)
Active Model
자세한 변경사항은 변경로그를 참고하세요.
제거된 것
ActiveModel::Errors
에서 Deprecated 되었던 메서드들이 제거되었습니다. (Commit)lenght 밸리데이터의
:tokenizer
옵션이 제거되었습니다. (Commit)반환 값이
false
인 경우 콜백을 중단시키는 동작이 제거되었습니다. (Commit)
주요 변경점
모델 속성에 할당된 원본 문자열이 더 이상 froze 되는 방식을 올바르게 수정했습니다. (Commit)
Active Job
자세한 변경사항은 변경로그를 참고하세요.
제거된 것
.queue_adapter
매개변수로 어댑터 클래스 전달할 수 없게 되었습니다. (Commit)ActiveJob::DeserializationError
에서#original_exception
을 제거했습니다. (Commit)
주요 변경점
ActiveJob::Base.retry_on
과ActiveJob::Base.discard_on
을 통한 선언적 예외 처리가 추가되었습니다. (Pull Request)모든 재시도가 실패한 후, 잡 인스턴스를 Yield 하도록 변경했습니다. 커스텀 로직에서
job.arguments
같은 것들에 접근할 수 있습니다. (Commit)
Active Support
자세한 변경사항은 변경로그를 참고하세요.
제거된 것
ActiveSupport::Concurrency::Latch
클래스가 제거되었습니다. (Commit)halt_callback_chains_on_return_false
가 제거되었습니다. (Commit)반환 값이
false
인 경우 콜백을 중단시키는 동작이 제거되었습니다. (Commit)
Deprecations
ActiveSupport::HashWithIndifferentAccess
사용법 중, 탑 레벨HashWithIndifferentAccess
클래스가 Softly Deprecated 되었습니다. (Pull Request)set_callback
과skip_callback
에서:if
,:unless
조건식 옵션에 문자열을 전달하는 방식이 Deprecated 되었습니다. (Commit)
주요 변경점
구간 분석과 Traveling이 DST 변경 전반에 더 일관성 있게 적용되도록 수정하였습니다. (Commit, Pull Request)
유니코드 버전을 9.0.0로 업데이트 했습니다. (Pull Request)
Duration
의#ago
,#since
의 별칭#before
,#after
를 추가했습니다. (Pull Request)Module#delegate_missing_to
를 추가했습니다. 현재 객체에 대해 정의되지 않은 메서드 호출을 프록시 객체에 위임할 수 있습니다. (Pull Request)현재 날짜/시간이 포함된 일자 전체를
range
로 반환하는Date#all_day
를 추가했습니다. (Pull Request)테스트를 위한
assert_changes
,assert_no_changes
메서드를 추가했습니다. (Pull Request)travel
과travel_to
가 이제 중첩된 호출에서 에러를 일으킵니다. (Pull Request)DateTime#change
가 usec와 nsec를 지원합니다. (Pull Request)
크레딧
레일즈를 견고하고 안정적인 프레임워크로 만들기 위해 많은 시간을 사용해주신 많은 개발자들을 레일즈 기여자 목록에서 확인할 수 있습니다. 이 분들에게 경의를 표합니다.
Last updated