Rails 프로젝트에서 사용할 수 있는 최고의 Ruby 보석은 무엇인가요?
이것이 이 기사에서 알게 될 것입니다!
7개의 보석을 주지만 백만 번 본 것과 같은 오래된 보석은 아닙니다 , 매우 유용하지만 잘 알려지지 않은 몇 가지 보석을 공유하겠습니다.
하지만 그 전에...
경고
거의 모든 것을 위해 보석을 사용하는 개발자를 보았습니다.
원격으로 들리면 도움이 될 수 있습니다.
그 보석이 그들이 가진 문제를 해결하는지, 그것이 최선의 선택인지, 잘 관리되고 문서화되었는지 등을 잠시 생각하지 마십시오.
그것은 실수입니다.
왜?
프로젝트에 의존하는 것이 많을수록 상황이 변할 때 중단될 가능성이 높아집니다.
그리고 상황은 항상 변합니다.
새로운 Rails 버전, 새로운 Ruby 버전, 새로운 기능 등
그런데...
보석은 많은 작업을 절약하고 코드를 정리하는 데 도움이 되며 보안 문제를 방지할 수 있으므로 현명하게 사용하세요!
지금 :
목록으로 들어가 보겠습니다.
1. 코드를 깨끗하게 유지하기 위한 데드 라우트 찾기
Rails 애플리케이션이 성장함에 따라 더 많은 경로가 누적됩니다.
코드를 변경하면 이 경로 중 일부가 유효하지 않게 됩니다. .
더 이상 필요하지 않습니다...
그러나 config/routes.rb
에 그대로 유지됩니다. , 관리하기 어렵게 만듭니다.
삭제할 경로를 어떻게 찾나요?
traceroute
라는 보석이 있습니다. .
경로를 로드하고 정의한 컨트롤러 작업과 비교합니다.
하지만 지금은 두 가지 제한 사항이 있습니다. :
- Rails 6에서는 작동하지 않습니다.
- 암시적 컨트롤러 동작을 감지하지 않습니다.
Rails 6 지원을 추가하기 위해 pull 요청을 보냈지만 이러한 제한이 없는 내 버전도 생각해 냈습니다.
여기에서 찾을 수 있습니다.
2. 문제를 피할 수 있도록 마이그레이션을 더 안전하게 만드십시오.
Rails 마이그레이션은 잘못 수행될 경우 많은 문제를 일으킬 수 있습니다.
예를 들어 :
Rails에는 열 캐시가 있고 마이그레이션을 실행해도 이 캐시가 재설정되지 않기 때문에 열을 제거하면 문제가 발생할 수 있습니다.
또 다른 예 :
인덱스를 추가하고 PostgreSQL을 실행하는 경우 작업이 완료될 때까지 전체 테이블이 잠깁니다.
사용자에게 좋지 않습니다.
애플리케이션은 잠긴 테이블과 함께 작동해야 하는 요청에 응답할 수 없습니다.
좋은 소식이 있습니까?
이 모든 것을 기억할 필요는 없습니다.
strong_migrations
의 도움으로 gem을 사용하면 이러한 안전하지 않은 마이그레이션 중 하나가 프로덕션에 적용되기 전에 알 수 있습니다.
3. 안전하지 않은 거래 방지
Rails 트랜잭션은 "전부 아니면 전무" 작업이어야 합니다.
이렇게 생겼어요 :
Book.transaction do # ...end
그러나 transaction
외부에 있는 작업을 수행하는 경우 파일에 쓰기 또는 API 요청과 같은 제어를 수행하는 경우 이러한 "전부 아니면 전무" 효과는 더 이상 사실이 아닙니다.
상상할 수 있듯이 이것은 모든 종류의 문제로 이어집니다.
해결책은 무엇인가요?
그다지 첨단 기술은 아니지만 실제로 "부작용"을 피하거나 거래의 "외부 세계"에 영향을 미치는 일을 하는 것입니다.
isolator gem이 도움이 될 수 있습니다.
모든 거래를 감사하여 안전한지 확인합니다.
gem을 설치한 다음 잘못된 transaction
을 감지하기만 하면 됩니다. 예외가 발생합니다.
시도해 보세요!
4. 느린 테스트를 찾아 더 빠르게
느린 테스트는 재미가 없습니다.
하지만 테스트가 느린 이유를 찾아 수정할 수 있도록 도와주는 도구가 있습니다!
이러한 도구 중 하나는 test-prof
+ ruby-prof
.
사용 방법은 다음과 같습니다. :
TEST_RUBY_PROF=1 갈퀴
출력 :
%self 총 자체 대기 하위 호출 이름 43.21 2.001 2.001 0.000 0.000 1 Kernel#sleep 2.97 0.184 0.138 0.000 0.046 1640 Array#permutation 1640 Array#permutation 1.49 0.0#여기서
sleep
에 대한 내 호출을 명확하게 볼 수 있습니다. 하지만 이것은 쉽게 API 호출, 큰 파일 읽기, 느린 SQL 쿼리 등이 될 수 있습니다.또 다른 방법은 이벤트 프로파일러를 사용하는 것입니다.
좋아요 :
EVENT_PROF='sql.active_record' EVENT_PROF_EXAMPLES=1 레이크이렇게 하면 가장 느린 쿼리를 실행하는 테스트를 찾는 데 도움이 됩니다.
Btw, Rails 6은 병렬 테스트를 추가했습니다.
test/test_helpers.rb
에서 이를 활성화해야 합니다. 현재 프로젝트를 업그레이드하는 경우5. 데이터 일관성 향상
검증이 훌륭합니다.
하지만 웹 애플리케이션을 구축하는 데 사용하는 프레임워크는 중요하지 않습니다.
데이터를 데이터베이스로 직접 가져오거나, 원시 SQL을 사용하여 레코드를 생성하거나, ORM에서 유효성 검사를 건너뛰는 몇 가지 방법을 사용하여 언제든지 유효성 검사를 우회할 수 있습니다.
즉...
유효성 검사는 사용자 오류로부터만 사용자를 보호하지만 개발자 오류는 보호하지 않습니다.
이러한 개발자 오류로 인해 데이터가 일관되지 않을 수 있습니다.
좋은 소식이 있습니까?
전부는 아니지만 대부분의 최신 SQL 데이터베이스는 유효성 검사와 같은 일련의 규칙인 "제약 조건"을 구현하지만 데이터베이스 수준에서 구현합니다.
따라서 데이터 일관성을 높이려면 이러한 제약 조건을 구현해야 합니다.
도움이 될 수 있는 보석 중 하나는 database_consistency입니다.
이 보석은 어떻게 사용하나요?
먼저 설치해야 합니다. 비밀이 없습니다.
둘째,
bundle exec database_consistency
를 실행합니다. 터미널에서 확인하려는 프로젝트 내부.이러한 보고서를 생성합니다. :
fail 주석 제목 열은 데이터베이스에 있어야 합니다.fail 주석 작성자 열은 데이터베이스에 필요해야 합니다.다음은 무엇인가요?
change_column_null
을 사용하여 누락된 데이터베이스 제약 조건(이 경우 null이 아님)을 추가합니다. 마이그레이션.6. 리팩토링 시간! 귀하의 코드에서 가장 나쁜 범죄자는 누구입니까?
코드를 개선하고 싶지만 어디서부터 시작해야 할지 모르십니까?
측정항목을 얻으세요!
순환적 복잡성 및 변동과 같은 많은 코드 메트릭이 있습니다. Churn은 코드에서 시간 경과에 따른 변화율을 확인합니다.
어떻게?
git 변경 내역을 사용합니다.
결과는?
가장 많이 변경되는 파일 목록입니다.
User
를 변경하는 데 90%의 시간을 할애하는 경우 model… 아마도 LONG 방식의 BIG 파일일 것입니다. 리팩토링을 위한 훌륭한 후보입니다!끊임없이 변화하는 이러한 파일을 찾는 데 도움이 되는 하나의 보석은
attractor
입니다. .이렇게 실행 :
유인자 보고서 -p 앱HTML 보고서와 리팩토링 작업에 집중하는 데 사용할 수 있는 이탈률이 높은 파일 목록을 생성합니다.
좋은 자료입니다!
7. 프로덕션에 사용되는 코드와 사용되지 않는 코드 확인
코드를 개선하는 데 도움이 되는 다른 도구로 마무리하겠습니다.
coverband
라고 합니다. .프로덕션 환경에서 이 gem을 실행하면(낮은 오버헤드) 어떤 코드가 실행되고 있는지에 대한 보고서를 받게 됩니다.
사용하지 않은 조회수까지 추적할 수 있습니다!
이렇게 하면 코드를 삭제하고 프로젝트를 정리할 때 결정을 내리는 데 도움이 됩니다.
사용하지 않는 코드가 쌓이지 않도록 하십시오!
요약
테스트를 더 빠르게 하고, 코드를 개선하고, 안전성을 높이기 위해 (대부분 Rails) 프로젝트에서 사용할 수 있는 강력하고 잘 알려지지 않은 Ruby 보석 7개에 대해 배웠습니다.
보석 남용에 대한 약간의 경고를 기억하십시오. 그러나 그것이 새로운 보석을 시도하는 데 방해가 되지 않도록 하십시오.
<블록 인용>Ruby 기술을 향상하고 블로그를 지원하려면 Ruby 책인 Ruby Deep Dive를 구입하는 것이 좋습니다. 🙂
읽어주셔서 감사합니다!