레일스 7(Rails 7)이 곧 출시됩니다. 아직 확정된 출시일은 없지만, 크리스마스 이전에 출시될 것으로 예상하고 있어 그리 오래 남지 않았습니다. 이 게시물이 게시된 시점의 최신 버전은 7.0.0.rc1입니다. , 첫 번째 릴리스 후보입니다. Basecamp, HEY, Github 및 Shopify는 모두 프로덕션 환경에서 Rails 7 알파를 실행하고 있으므로 릴리스 후보도 꽤 안정적일 것으로 예상할 수 있습니다.
이번 게시물에서는 Rails 7이 가져올 새로운 기능과 변경 사항 중 일부를 살펴보겠습니다.
노드 및 웹팩은 필요하지 않음
예, 당신이 읽은 내용이 맞습니다! Rails 7의 JavaScript에는 더 이상 NodeJS 또는 Webpack이 필요하지 않습니다. 그리고 npm 패키지를 계속 사용할 수 있습니다.
Babel로 ES6를 트랜스파일하고 Webpack으로 번들링하려면 많은 설정이 필요합니다. Rails는 Webpacker을 통해 꽤 잘 지원했지만 gem은 많은 짐을 가져왔고, 특히 업그레이드 가능성을 유지하면서 이해하고 변경하기가 어려웠습니다.
이제 rails new로 생성된 새 앱의 기본값은 importmaps-rails를 통해 가져오기 맵을 사용하는 것입니다. gem.package.json을 작성하는 대신 npm로 종속성 설치 또는 yarn , ./bin/importmap을 사용합니다 종속성을 고정(또는 고정 해제 또는 업데이트)하는 CLI
예를 들어 date-fns을 설치하려면 :
그러면 config/importmap.rb에 한 줄이 추가됩니다. 좋아요:
JavaScript 코드에서는 이전처럼 모든 것을 계속 사용할 수 있습니다.
이 설정에서 명심해야 할 한 가지는 사용자가 작성한 내용과 브라우저가 얻는 내용 사이에 트랜스파일이 없다는 것입니다. 이제 중요한 모든 브라우저가 기본적으로 ES6를 지원하므로 대부분의 경우 이는 괜찮습니다.
하지만 이는 TypeScript나 JSX를 사용하기 전에 JS로 변환해야 하기 때문에 사용할 수 없다는 의미이기도 합니다.
따라서 JSX와 함께 React를 사용하려면 여전히 다른 설정(webpack/rollup/esbuild 사용)으로 대체해야 합니다.
Rails 7이 이를 수행할 수 있습니다. 선택한 전략에 대한 명령 하나만 있으면 됩니다:
터보링크와 UJS가 터보와 자극으로 대체
Rails 7로 생성된 애플리케이션은 기본적으로 Turbolinks 및 UJS 대신 Turbo 및 Stimulus(Hotwire에서)를 얻습니다. Hotwire는 유선으로 HTML을 전송하여 DOM에 빠른 업데이트를 제공하는 새로운 접근 방식입니다.
데이터베이스 계층의 암호화
Rails 7에서는 encrypts를 사용하여 특정 데이터베이스 필드를 암호화된 것으로 표시할 수 있습니다. ActiveRecord::Base의 메서드 . 즉, 초기 설정 후에 다음과 같은 코드를 작성할 수 있습니다:
다른 속성과 마찬가지로 암호화된 속성을 계속 사용할 수 있습니다. Rails 7은 데이터베이스와 애플리케이션 사이에서 이를 자동으로 암호화하고 해독합니다.
하지만 여기에는 약간의 특이점이 있습니다. deterministic: true를 전달하지 않으면 해당 필드로 데이터베이스를 쿼리할 수 없습니다. encrypts에 대한 옵션 메서드. 결정적 모드는 기본 비결정적 모드보다 덜 안전하므로 반드시 쿼리해야 하는 속성에만 사용하세요.
비동기 쿼리
이제 load_async이 있습니다. 백그라운드에서 결과를 가져오기 위해 데이터를 쿼리할 때 사용할 수 있는 메서드입니다. 이는 컨트롤러 작업에서 관련되지 않은 여러 쿼리를 로드해야 할 때 특히 중요합니다. 다음을 실행할 수 있습니다:
그러면 백그라운드에서 두 쿼리가 동시에 실행됩니다. 따라서 각 쿼리에 200ms가 걸리면 데이터를 가져오는 데 소요되는 총 시간은 순차적으로 가져오는 경우 400ms가 아니라 ~200ms가 됩니다.
Rails 7의 Zeitwerk 모드
이는 여전히 클래식 로더를 실행하는 이전 애플리케이션에 대한 주요 변경 사항입니다. 모든 Rails 7 애플리케이션은 Zeitwerk 모드를 사용해야 하지만 전환은 매우 쉽습니다. Zeitwerk 업그레이드 가이드 전체를 확인하세요.
기타 Rails 7 업데이트
작업을 무제한으로 재시도
이제 ActiveJob에서 :unlimited 전달을 허용합니다. attempts retry_on의 매개변수 . Rails는 최대 시도 횟수 없이 계속 작업을 시도합니다.
명명된 변형
이제 ActiveStorage에서 변형 이름을 지정할 수 있습니다. 액세스할 때마다 크기를 지정하는 대신
HTML 속성으로 해시
새로운 tag.attributes이 있습니다. 해시를 HTML 속성으로 변환하는 보기에서 사용하기 위한 방법:
생산하겠습니다
루비 debug
디버깅을 위한 새로운 기본값이 byebug에서 변경되었습니다. debug으로 보석.
byebug에 전화하는 대신 , 이제 debugger에 전화해야 합니다 디버깅 세션에 들어가기 위한 코드입니다.
sole으로 단일 레코드를 어설션
이제 레코드를 쿼리할 때 sole을 호출할 수 있습니다. 또는 find_sole_by (first 대신 또는 find_by ) 쿼리가 단일 레코드에만 일치해야 한다고 주장하려는 경우.
협회 유무 확인
이제 where.associated(:association)을 사용할 수 있습니다 가입해서 아이디가 있는지 확인하는 대신, 레코드에 연관이 있는지 확인하는 것입니다.
컨트롤러 작업에서 생성된 파일 스트리밍
이제 send_stream을 사용할 수 있습니다 즉석에서 생성되는 파일 스트리밍을 시작하려면 컨트롤러 작업 내에서 실행하세요.
이는 사용자에게 즉각적인(부분적인) 응답을 제공하여 사용자가 무슨 일이 일어나고 있는지 알 수 있도록 하며 Heroku에 배포하는 경우 추가적인 이점을 제공합니다.
파일이 즉시 스트리밍을 시작하므로 Heroku는 연결을 종료하지 않습니다. 이는 30초 이상 걸리는 일회성 파일을 생성하기 위해 백그라운드 작업에 의존할 필요가 없음을 의미합니다.
Rails 7로 업그레이드
이전 버전의 Rails와 마찬가지로 업그레이드도 간단합니다. 아직 공식 업그레이드 가이드는 없지만 단계는 동일하게 유지됩니다.
- Gemfile(
7.0.0.rc1)에서 Rails 버전 번호를 변경합니다. 발행일 기준)bundle update를 실행하세요. . bundle exec rails app:update실행 . 대화형 CLI를 따르고 필요에 따라 파일을 추가/교체/수정하십시오.- 테스트를 실행하고 모든 것이 예상대로 작동하는지 확인하세요.
마무리
Rails 7 릴리스 노트에서 버그 수정, 기능 및 변경 사항의 전체 목록을 확인할 수 있습니다. 현재로서는 포괄적이지 않지만 곧 업데이트될 것으로 예상됩니다.
아직 Rails 6 이하 버전을 실행하고 계시다면 Rails 7의 최종 릴리스에서 Rails 6.1이 "보안 문제 전용" 모드로 전환되어 더 이상 버그 수정을 받을 수 없다는 점에 유의하시기 바랍니다. 이는 또한 더 이상 수정 사항을 받을 수 없으므로 Rails 5.2에 대한 EOL로 표시됩니다.
즐거운 코딩을 즐겨보세요!
추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!
풀킷 고얄
우리의 객원 저자인 Pulkit은 수석 풀스택 엔지니어이자 컨설턴트입니다. 여가 시간에는 자신의 블로그에 자신의 경험을 글로 씁니다.
Pulkit Goyal의 모든 기사