Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

대부분의 사람들이 들어보지 못한 7가지 위대한 루비 보석

Rails 프로젝트에서 사용할 수 있는 최고의 Ruby 보석은 무엇인가요?

이것이 이 기사에서 알게 될 것입니다!

7개의 보석을 주지만 백만 번 본 것과 같은 오래된 보석은 아닙니다 , 매우 유용하지만 잘 알려지지 않은 몇 가지 보석을 공유하겠습니다.

하지만 그 전에...

경고

거의 모든 것을 위해 보석을 사용하는 개발자를 보았습니다.

원격으로 들리면 도움이 될 수 있습니다.

그 보석이 그들이 가진 문제를 해결하는지, 그것이 최선의 선택인지, 잘 관리되고 문서화되었는지 등을 잠시 생각하지 마십시오.

그것은 실수입니다.

왜?

프로젝트에 의존하는 것이 많을수록 상황이 변할 때 중단될 가능성이 높아집니다.

그리고 상황은 항상 변합니다.

새로운 Rails 버전, 새로운 Ruby 버전, 새로운 기능 등

그런데...

보석은 많은 작업을 절약하고 코드를 정리하는 데 도움이 되며 보안 문제를 방지할 수 있으므로 현명하게 사용하세요!

지금 :

목록으로 들어가 보겠습니다.

1. 코드를 깨끗하게 유지하기 위한 데드 라우트 찾기

Rails 애플리케이션이 성장함에 따라 더 많은 경로가 누적됩니다.

코드를 변경하면 이 경로 중 일부가 유효하지 않게 됩니다. .

더 이상 필요하지 않습니다...

그러나 config/routes.rb에 그대로 유지됩니다. , 관리하기 어렵게 만듭니다.

삭제할 경로를 어떻게 찾나요?

traceroute라는 보석이 있습니다. .

경로를 로드하고 정의한 컨트롤러 작업과 비교합니다.

하지만 지금은 두 가지 제한 사항이 있습니다. :

  1. Rails 6에서는 작동하지 않습니다.
  2. 암시적 컨트롤러 동작을 감지하지 않습니다.

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을 실행하면(낮은 오버헤드) 어떤 코드가 실행되고 있는지에 대한 보고서를 받게 됩니다.

사용하지 않은 조회수까지 추적할 수 있습니다!

대부분의 사람들이 들어보지 못한 7가지 위대한 루비 보석

이렇게 하면 코드를 삭제하고 프로젝트를 정리할 때 결정을 내리는 데 도움이 됩니다.

사용하지 않는 코드가 쌓이지 않도록 하십시오!

요약

테스트를 더 빠르게 하고, 코드를 개선하고, 안전성을 높이기 위해 (대부분 Rails) 프로젝트에서 사용할 수 있는 강력하고 잘 알려지지 않은 Ruby 보석 7개에 대해 배웠습니다.

보석 남용에 대한 약간의 경고를 기억하십시오. 그러나 그것이 새로운 보석을 시도하는 데 방해가 되지 않도록 하십시오.

<블록 인용>

Ruby 기술을 향상하고 블로그를 지원하려면 Ruby 책인 Ruby Deep Dive를 구입하는 것이 좋습니다. 🙂

읽어주셔서 감사합니다!