Ruby에서 복구 절을 사용할 때 복구하려는 예외의 종류를 지정할 수 있습니다. 다음과 같은 예외 클래스 목록을 제공하기만 하면 됩니다. begin raise RuntimeError rescue RuntimeError, NoMethodError puts rescued! end 그러나 코드를 작성할 때 예외 클래스가 무엇인지 모른다면 어떻게 될까요? 가장 확실한 대답은 모든 예외를 구제하고 일종의 테스트를 수행한 다음 통과하지 못한 예외를 다시 발생시키는 것입니다. 다음과 같습니다. begin raise FUBAR! T
Ruby 애플리케이션 서버는 일반적으로 nginx와 같은 웹 서버와 함께 사용됩니다. 사용자가 Rails 앱에서 페이지를 요청하면 nginx는 요청을 애플리케이션 서버에 위임합니다. 하지만 정확히 어떻게 작동합니까? nginx는 유니콘과 어떻게 대화하나요? 가장 효율적인 옵션 중 하나는 유닉스 소켓을 사용하는 것입니다. 그들이 어떻게 작동하는지 봅시다! 이 게시물에서는 소켓의 기본부터 시작하여 nginx에 의해 프록시되는 간단한 애플리케이션 서버를 만드는 것으로 끝납니다. 소켓을 사용하면 마치 파일에 쓰거나 파일을 읽는 것처럼
아직 바이버그를 안 보신 분들이 계시다면 꼭 보시길 추천합니다. Ruby 2.x를 위한 훌륭한 디버거입니다. 저자의 말: Byebug는 사용이 간편하고 Ruby 2용 기능이 풍부한 디버거입니다. 실행 제어를 위한 새로운 TracePoint API와 호출 스택 탐색을 위한 새로운 Debug Inspector API를 사용하므로 내부 핵심 소스에 의존하지 않습니다. C 확장으로 개발되어 속도가 빠릅니다. 또한 전체 테스트 제품군이 있으므로 신뢰할 수 있습니다. 기본 설정은 꽤 간단합니다. 젬을 설치하면 됩니다. byebug를 사용하는
case 문보다 더 간단하고 지루할 수 있는 것은 없습니다. 그것은 C로부터의 홀드오버입니다. 당신은 많은 if를 대체하기 위해 그것을 사용합니다. 경우 폐쇄. 아니면? 사실, Ruby의 case 서술문은 당신이 상상하는 것보다 훨씬 더 풍부하고 복잡합니다. 한 가지 예를 살펴보겠습니다. case Hi there when String puts case statements match class end # outputs: case statements match class 이 예에서는 case 문이 항목의 값과 일치할 뿐만
쉽게 재현할 수 없는 버그가 있었나요? 사람들이 귀하의 앱을 한동안 사용한 경우에만 발생하는 것 같습니다. 그리고 오류 메시지와 역추적은 놀라울 정도로 도움이 되지 않습니다. 이럴 때 예외가 발생하기 직전에 앱 상태의 스냅샷을 찍을 수 있다면 정말 편리할 것입니다. 예를 들어 모든 지역 변수와 그 값의 목록을 가질 수 있다면. 음, 할 수 있습니다. 그리 어렵지도 않습니다! 이 게시물에서는 예외 발생 시 현지인을 캡처하는 방법을 보여 드리겠습니다. 하지만 먼저 경고해야 합니다. 이러한 기술 중 어느 것도 프로덕션에 사용해서는 안
Unix 데몬은 백그라운드에서 실행되는 프로그램입니다. Nginx, Postgres, OpenSSH가 몇 가지 예입니다. 그들은 몇 가지 특별한 트릭을 사용하여 프로세스를 분리하고 모든 터미널과 독립적으로 실행되도록 합니다. 저는 항상 데몬에 매료되었습니다. 아마도 이름 때문일 것입니다. 그리고 데몬이 어떻게 작동하는지 설명하는 포스트를 작성하는 것이 재미있을 것이라고 생각했습니다. 특히 Ruby에서 생성하는 방법에 대해 설명합니다. ...하지만 먼저. 집에서 시도하지 마세요! 아마도 데몬을 만들고 싶지 않을 것입니다. 작업을
Ruby의 예외 계층 구조를 살펴본 적이 있다면 이상한 점을 발견했을 수 있습니다. RuntimeError 및 NoMethodError와 같은 모든 일반적인 예외 외에도 Errno::*에 대한 이상한 참조가 있습니다. . Exception StandardError ... SystemCallError Errno::* ... 디스크가 가득 찼을 때 디스크에 쓰기 작업을 하거나 실패한 네트워크를 통해 API 호출을 시도한 적이 있다면 이러한 유형의 오류가 실제로 발생하는 것을 보았을 것입니다. 존재
때로는 표준 역추적/오류 메시지 콤보가 충분하지 않습니다. 때때로 오류의 원인을 찾기 위해 추가 데이터가 필요합니다. 다행히 Ruby에서는 매우 쉽습니다. 오류 메시지 사용자 정의 오류에 컨텍스트 정보를 추가하는 가장 간단한 방법은 예외 메시지에 추가하는 것입니다. 아래 예에서는 예외를 포착하고 새 메시지로 다시 발생시킵니다. begin raise foo rescue => e raise e.class, bar end # RuntimeError: bar 이 접근 방식의 좋은 사용 사례는 템플릿을 렌더링할 때일 수
Fiddle은 1.9.x에서 Ruby의 표준 라이브러리에 추가된 잘 알려지지 않은 모듈입니다. Ruby의 C 라이브러리와 직접 상호 작용할 수 있습니다. Ruby 인터프리터가 실행되는 동안 검사하고 변경할 수도 있습니다. 한 언어로 작성된 코드가 다른 언어로 작성된 메소드를 호출할 수 있도록 하는 인기 있는 C 라이브러리인 libffi를 래핑하여 작동합니다. 들어 본 적이 없다면 ffi는 외부 기능 인터페이스를 의미합니다. 그리고 C에만 국한되지 않습니다. Fiddle을 배우면 Rust 및 이를 지원하는 다른 언어로 작성된 라이브
여기 Honeybadge에서 우리는 Sidekiq를 많이 사용하며 훌륭합니다. 하지만 제가 자주 겪는 한 가지 문제가 있습니다. ...보시다시피, 저는 개발 중일 때 일반적으로 Sidekiq을 실행하지 않습니다. 그러나 수동 테스트 과정에서 많은 작업이 대기열에 추가됩니다. 그래서 다음에 할 Sidekiq를 실행하면 해당 작업을 모두 처리하려고 합니다. 좋지 않습니다. 하나의 Sidekiq 대기열에서 작업을 삭제하는 코드 조각을 쉽게 찾을 수 있습니다. 하지만 많은 대기열의. 나는 그들 모두에서 작업을 지우고 싶습니다. 조금 파
레일 작업의 좋은 점 중 하나는 개발 중에 문제가 발생하면 정말 멋진 오류 세부 정보 페이지가 표시된다는 것입니다. 앱과 관련된 부분이 강조 표시된 멋진 역추적을 얻을 수 있습니다. 게시된 매개변수를 확인하고 환경 및 세션 변수를 검사할 수 있습니다. 오늘은 이러한 멋진 오류 페이지가 어떻게 작동하는지 살펴보겠습니다. 액션팩 열기 오늘 우리가 주로 다룰 파일은 actionpack/lib/action_dispatch/middleware/debug_exceptions.rb입니다. 개발 모드 오류 페이지를 표시할 때 대부분의 무거
Ruby의 raise 구문은 발생시키려는 오류의 종류를 지정하기 위한 몇 가지 옵션을 제공합니다. 아래 코드에서는 RuntimeError를 발생시키는 세 가지 방법을 보여주었습니다. raise hello raise RuntimeError, hello raise RuntimeError.new(hello) # ...all of the above result in RuntimeError: hello 좋긴 한데 예외가 아닌 다른 것을 발생시키고 싶을 때 어떻게 됩니까? 숫자를 올리고 싶다면? 글쎄, Ruby는 나를 허용하지 않을 것입
나는 항상 예외가 다른 흐름 제어 메커니즘에 비해 루비에서 느릴 것이라고 강하게 의심했습니다. 결국 예외는 단순한 중단 또는 반환보다 훨씬 더 복잡합니다. 하지만 예전에 내 예감이 틀렸던 적이 있어서 테스트를 해봐야겠다고 생각했습니다. 아래 코드에서 나는 Benchmark-ips gem을 사용하여 예외, 중단 및 반환을 통해 루프를 종료하는 상대적 성능을 비교하고 있습니다. 웹에서 mri 1.9로 이와 같은 벤치마크를 수행하는 예를 보았습니다. 하지만 mri 2.2로 해보고 싶었습니다. require benchmark/ips d
열거자는 Ruby를 강력하고 역동적인 언어로 만드는 핵심 요소입니다. 그리고 게으른 열거자는 매우 큰 컬렉션으로 효율적으로 작업할 수 있도록 하여 이를 한 단계 더 발전시킵니다. 파일 - 밝혀진 바에 따르면 - 라인이나 문자의 큰 모음입니다. 따라서 게으른 열거자는 매우 흥미롭고 강력한 일을 가능하게 합니다. 열거자란 무엇입니까? each와 같은 메소드를 사용할 때마다 , 열거자를 만듭니다. 이것이 [1,2,3].map { ... }.reduce { ... }와 같은 메소드를 함께 연결할 수 있는 이유입니다. . 아래 예에서 내
배열에 많은 데이터가 있지만 해시를 사용하는 것처럼 키/값 조회를 수행해야 하는 경우가 있습니까? 다행히 Ruby는 배열을 키-값 구조로 처리하는 메커니즘을 제공합니다. 확인해 봅시다! Array#assoc 소개 및 Array#rassoc 마법의 주식 선별 기계를 받았다고 상상해보십시오. 몇 분마다 주식을 사거나 팔도록 권장합니다. 컴퓨터에 연결하고 다음과 같은 데이터 스트림을 수신했습니다. picks = [ [AAPL, buy], [GOOG, sell], [MSFT, sell] ] Google에 대한 최신 지침을
Ruby는 스크립트가 자체 소스 파일을 데이터 소스로 사용할 수 있는 방법을 제공한다는 사실을 알고 계셨습니까? 일회성 스크립트와 개념 증명을 작성할 때 시간을 절약할 수 있는 멋진 트릭입니다. 확인해 봅시다! DATA 및 END 아래 예에서는 __END__라는 재미있는 키워드를 사용하고 있습니다. . __END__ 아래의 모든 항목 Ruby 인터프리터는 무시합니다. 하지만 더 흥미롭게도, ruby는 DATA라는 IO 객체를 제공합니다. , __END__ 아래의 모든 내용을 읽을 수 있습니다. 다른 파일에서 읽을 수 있는 것처럼
코드가 해당 예외의 수명 주기를 제어하지 않는 경우에도 가장 최근의 예외를 가져올 수 있는 것이 종종 유용합니다. 애플리케이션에 기본 충돌 감지를 추가하고 싶다고 상상해 보십시오. 포착되지 않은 예외의 결과로 발생하는 충돌에 대한 추가 정보를 기록하고 싶습니다. 첫 번째 단계는 애플리케이션이 종료될 때마다 실행되는 핸들러를 추가하는 것입니다. Ruby 커널의 at_exit 메소드를 통해 이 작업을 수행하는 것은 매우 쉽습니다. at_exit puts the app exited end 그러나 예외의 결과로 종료 콜백이 호출되
일부 레거시 애플리케이션으로 작업할 때 가장 어려운 문제 중 하나는 코드가 테스트 가능하도록 작성되지 않았다는 것입니다. 따라서 의미 있는 테스트를 작성하는 것은 어렵거나 불가능합니다 . 그것은 닭과 달걀의 문제입니다. 레거시 애플리케이션에 대한 테스트를 작성하려면 코드를 변경해야 하지만 먼저 테스트를 작성하지 않고는 자신 있게 코드를 변경할 수 없습니다! 이 역설을 어떻게 처리합니까? 이것은 Michael Feathers의 뛰어난 Working Effectively with Legacy Code에서 다룬 많은 주제 중 하나
AngularJS를 시작하는 것은 어렵지 않습니다. 설명서는 현존하는 최고 중 일부이며 튜토리얼은 충분히 간단합니다. 하지만 기술을 결합하기 시작하면 상황이 복잡해집니다. JavaScript 대신 CoffeeScript를 사용하는 경우 사전 처리 문제와 명백한 구문 차이를 고려해야 합니다. 이것들은 그 자체로 사소한 문제이지만 Ruby on Rails, Jasmine 및 Karma를 혼합하면 어떻게 될까요? 놀라울 정도로 까다로워집니다. 이것이 바로 이 튜토리얼에서 사용할 스택입니다. 우리가 처벌에 열광해서가 아니라 실제 세
Rails를 사용하는 것이 좋은 이유 중 하나는 일반적인 프로그래밍 요구 사항(승인, 사이트 관리, 전자 상거래)에 대해 문제에 대한 솔루션을 코딩하고 패키징했을 가능성이 있는 것보다 더 똑똑한 사람에게 이름을 지정한다는 것입니다. 보석의 형태로. Gemfile에 보석을 추가하고 보석의 작동 방식을 제대로 이해하지 않고도 보석의 유용성을 최대한 활용할 수 있지만 이 모든 것이 어떻게 연결되는지 궁금하신가요? 여기에서 Ryan Bates의 CanCan 인증 gem을 자세히 살펴보고 다음 질문에 답할 것입니다(더 광범위하게 묻는 경