웹 소켓은 요즘 점점 더 많은 언론을 얻고 있습니다. 우리는 그들이 미래라고 들었습니다. Rails 5의 ActionCable 덕분에 그 어느 때보다 사용하기 쉽다고 들었습니다. 하지만 웹 소켓이란 정확히 무엇입니까? 어떻게 작동합니까? 이 게시물에서 우리는 Ruby에서 처음부터 간단한 WebSocket 서버를 구축하여 이러한 질문에 답할 것입니다. 완료되면 브라우저와 서버 간에 양방향 통신이 이루어집니다. 이 게시물의 코드는 학습 연습용입니다. 실제 프로덕션 앱에서 웹 소켓을 구현하려면 뛰어난 websocket-ruby ge
Honeybadger에서는 apticron을 사용하여 모든 서버에 대한 aptpackage 업데이트를 최신 상태로 유지하고 있습니다. 처음에는 받은 편지함으로 apticron 이메일이 도착했지만 어느 시점에서 나는 Slack 알림 채널에서 이메일을 받는 것이 낫다고 결정했습니다. Slack에는 이메일을 수신하여 채널에 게시할 수 있는 편리한 이메일 앱이 있어서 시도해 보았습니다. 작동했지만 이메일이 파일로 표시되는 방식이 마음에 들지 않고 메일 헤더 등의 모든 소음이 있었기 때문에 조금 더 원하는 것을 채찍질하기로 결정했습니다. 그
우리는 여기 Honeybadge에서 이정표에 도달했습니다. 판매 페이지는 더 이상 주요 Rails 앱의 일부가 아닙니다. 몇 년 동안 제 위시리스트에 있었지만 정확히 최우선 순위는 아니었습니다. 이 마이그레이션의 일환으로 URI.join을 사용하고 있습니다. 특정 리디렉션 링크를 구성합니다. 그러나 나는 곧 문제에 봉착했다. URI.join 예상대로 작동하지 않았습니다. 다음과 같이 많은 경로 조각을 가져와서 함께 묶을 것으로 예상했습니다. # This is what I was expecting. It didnt happen.
고백 시간. 4년 동안 Honeybadger에서 일한 내 개발 환경은 크게 바뀌지 않았습니다. 그러나 그 동안 Honeybadge는 약 10개의 서비스가 작동해야 하므로 훨씬 더 정교해졌습니다. 이것이 우리가 로컬 개발을 위해 Docker로 옮겨온 이유입니다. 모든 개발자가 Postgres, Cassandra, Memcached 등을 설정하는 대신 docker-compose를 사용하여 미리 만들어진 환경을 가동할 수 있습니다. 굉장합니다. 당연히 Dockerized 애플리케이션을 배포하는 것이 얼마나 쉬운지 궁금해지기 시작했습니
애플리케이션을 EC2에 배포할 때 autoscaling 그룹을 사용하는 것이 좋습니다. Autoscaling 그룹을 사용하면 수동 개입 없이 애플리케이션이 수요에 맞게 확장 및 축소하거나 실패한 인스턴스에서 복구할 수 있습니다. 그러나 작동하도록 하려면 부팅이 완료된 후 모든 인스턴스가 라이브 트래픽을 처리할 준비가 완전히 되어 있어야 합니다. 새 서버에서 약간의 변경을 수행하거나 준비가 되기 전에 capistrano를 통해 초기 배포를 수행하는 데 익숙한 경우에는 앱을 서버에 배포하는 것보다 약간 더 많은 노력이 필요합니다. 예
저는 컴퓨터 공학 학위가 없습니다. 많은 루비스트들은 그렇지 않습니다. 그래서 오랫동안 나는 big-O 표기법에 대해 배우는 것을 피했습니다. 좀 더 고급 수학처럼 보입니다. 내 말은:O(N^2) . 어서 해봐요. 대신 경험 법칙을 배웠습니다. 해시에서 특정 항목을 찾는 것이 배열보다 빠릅니다. 중첩 루프 방지 보기에서 목록을 생성할 때 우발적인 DB 쿼리에 주의하세요. 이 규칙은 훌륭하지만 WHY를 이해하지 못한다면 그들이 작동하면 실수를 하고 설명할 수 없는 성능 문제를 겪고 있는 자신을 발견하게 될 것입니다. 중요한
Ruby 회의에서 더 이상 Ruby에 대해 이야기하지 않는 이유는 무엇입니까? Rocky Mountain Ruby 2016에 대한 최근 후원은 커뮤니티의 증가하는 다양성을 보여줍니다. 우리가 회의에 보낸 사람은 무역에 의한 개발자가 아닙니다. 그리고 나는 잠시 동안 회담의 기술적인 내용에 대해 걱정했습니다. 그러나 그들을 지켜본 결과 가장 경험이 풍부한 Rubyists조차도 직장에서 성공하기 위해 비기술적 기술을 강조하고 있음이 분명합니다. 이러한 변화를 한탄하는 개발자라면 다음과 같은 대화를 염두에 두지 않았을 수 있습니다.
다른 날 나는 초보자를 위해 작성된 Ruby 예외에 대한 소개를 찾고 있었습니다. 기본적인 Ruby 구문을 알고 있지만 예외가 무엇인지 또는 왜 유용한지 잘 모르는 사람들을 위한 것입니다. 나는 그것을 찾을 수 없었고, 그래서 내가 직접 가보기로 결정했습니다. 유용하게 사용하시기 바랍니다. 혼란스러운 점이 있으면 @StarrHorne으로 저에게 트윗해 주십시오. :) 예외란 무엇입니까? 예외는 예기치 않은 이벤트를 처리하는 Ruby의 방식입니다. 코드에 오타를 만들어 SyntaxError와 같은 메시지와 함께 프로그램이 충돌
레일즈의 ActiveRecord를 처음 봤을 때를 기억합니다. 그것은 계시였습니다. 이것은 2005년이었고 저는 PHP 앱에 대한 SQL 쿼리를 수동으로 코딩하고 있었습니다. 갑자기 데이터베이스 사용이 지루한 일에서 쉽고 - 감히 - 재미로 바뀌었습니다. ...그런 다음 성능 문제를 확인하기 시작했습니다. ActiveRecord 자체는 느리지 않았습니다. 실제로 실행 중인 쿼리에 관심을 기울이지 않았습니다. 그리고 Rails CRUD 앱에서 사용되는 가장 관용적인 데이터베이스 쿼리 중 일부는 기본적으로 더 큰 데이터 세트로
이전에 Ruby의 예외로 작업한 적이 있다면 어떤 예외가 구제되고 어떤 예외가 발생하지 않는지 지정할 수 있습니다. begin raise ArgumentError rescue ArgumentError # Rescues the `ArgumentError` end ... 부모를 구하면 모든 자식도 구한다는 것을 알고 있을 것입니다. begin raise ArgumentError rescue StandardError # Rescues `ArgumentError`, because it inherits from #
젊은 프로젝트에서 작업할 때 나중에 확장하기 더 쉽거나 더 어렵게 만드는 결정을 끊임없이 내립니다. 때로는 더 빨리 배송할 수 있도록 약간의 기술적 부채를 쌓기 위해 단기 이익을 선택하는 것이 좋습니다. 그러나 다른 경우에는 대안이 있는지 몰랐기 때문에 기술적인 부채를 떠안게 됩니다. 내가 이렇게 말할 수 있는 이유는 여기 Honeybadger에서 우리가 삶을 원래보다 훨씬 더 힘들게 만드는 몇 가지 일을 했기 때문입니다. 몇 가지 핵심 사항을 이해했다면 스케일링이 훨씬 덜 고통스러웠을 것입니다. UUID 사용 기본 키라고
Honeybadge에서는 처리 파이프라인에서 Sidekiq에 크게 의존합니다. 우리가 하는 거의 모든 일은 어느 시점에서 대기열을 통해 실행됩니다. 결과적으로 Sidekiq을 잘 실행하고 있는지 확인하고 싶습니다. 최근 EC2로 이전하면서 안정적인 장기 서버 세트에서 작업을 실행하는 끊임없이 변화하는 인스턴스 세트로 변경했습니다. 이로 인해 부팅 시 Sidekiq를 시작하는 방법을 다시 살펴보게 되었습니다. 지금은 이전보다 훨씬 더 중요하기 때문입니다. 과거에 우리는 모든 작업자 프로세스를 실행하기 위해 신에 의존했습니다. 왜냐하
Ruby 2.4와 함께 제공되는 새로운 기능 중에는 개선된 유니코드 지원이 있습니다. 특히 upcase와 같은 메소드 및 downcase 예상대로 작동하고 ä를 Ä로 바꾸고 다시 되돌립니다. 이것은 저를 궁금하게 만들었습니다. André Arko의 블로그 게시물을 읽은 2013년 이후로 어떤 다른 유니코드 개선이 이루어졌습니까? Ruby의 Strings는 이제 UTF-8입니다... 맞나요? 나는 Ruby의 모든 문자열 메소드를 테스트했는데, 기술적 오류가 아니라 최소 놀라움의 원칙 위반 여부를 찾습니다. 구체적으로 제 가정은 다음
Ruby 3x3 작업을 따라오셨다면 Optcarrot에 대해 들어보셨을 것입니다. 순수한 Ruby로 작성된 NES 에뮬레이터입니다. 나는 최근에 Optcarrot 소스를 살펴보고 있었고 흥미로운 세부 사항이 하나 눈에 띄었습니다. 종종 간과되지만 매우 유용한 Ruby 해시의 기능을 광범위하게 사용합니다. 그것은 모든 객체를 해시 키로 사용할 수 있는 기능입니다. 컨텍스트:NES 메모리 매핑 고급 프로그래머로서 우리는 메모리를 RAM으로 생각하는 경향이 있습니다. 그러나 하위 수준에서 메모리는 다른 많은 용도로 사용됩니다.
TLDR:글머리 기호만 보려면 CHANGELOG를 확인하세요. 저는 최근 Ruby에서 예외를 보고하기 위해 gem에 대한 최신 주요 업데이트를 제공했습니다. v2release는 새로운 구성 전략을 포함하는 전체 재작성이지만 v3에는 주요 변경 사항이 적지만 기능 및 사용 편의성이 많이 개선되었습니다. 다룰 내용이 많으므로 바로 들어가겠습니다. 즐기세요! 일반 루비 모드 Rails 세계에서는 gem을 설치할 때 자동으로 애플리케이션과 통합될 것으로 예상됩니다. 예를 들어, 많은 gem은 Rails가 초기화될 때 자체 코드를 실행
나는 최근에 특정 유니코드 문자를 사용하여 Ruby의 문자열 메서드 대부분을 테스트하여 예기치 않게 작동하는지 확인하는 기사를 게시했습니다. 많은 사람들이 그랬습니다. 몇몇 사람들이 이 기사에 대해 가지고 있는 한 가지 비판은 내가 테스트를 위해 정규화되지 않은 문자열을 사용하고 있다는 것이었습니다. 솔직히 유니코드 정규화에 대해 약간 모호했습니다. 많은 Rubyists가 있는 것 같습니다. 정규화를 사용하면 내 테스트에서 예기치 않게 동작하는 많은 유니코드 문자열을 가져 와서 Ruby의 문자열 메서드와 잘 작동하는 문자열로 변
오늘 저는 성능 향상을 위해 제가 가장 좋아하는 기술 중 하나에 대해 이야기하고 싶었습니다. 이는 결국 합산되고 가끔만 응용 프로그램을 연기가 나는 잔해 더미로 줄이는 작은 성능 향상의 원천입니다. 아주 가끔만. 이 기술을 메모이제이션이라고 합니다. 10달러의 컴퓨터 과학 용어에도 불구하고 메서드를 호출할 때마다 동일한 작업을 수행하는 대신 반환 값을 변수에 저장하고 대신 사용한다는 의미입니다. 다음은 의사 코드에서 보이는 것입니다. def my_method @memo = <work> if @memo is un
모듈(및 클래스)은 중첩되어야 합니다. ActiveRecord::RecordNotFound와 같은 코드 조각 너무 일반적이어서 우리는 그것에 대해 두 번 생각하지 않습니다. 그러나 Ruby의 중첩 구현과 Rails의 자동 로드 시스템에는 코드가 이상하고 놀라운 방식으로 실패하게 만들 수 있는 몇 가지 함정이 있습니다. 이 게시물에서는 이러한 함정의 기원과 이를 방지할 수 있는 방법에 대해 설명합니다. 상수란 무엇입니까? 이 게시물은 모듈에 관한 것이지만 모듈을 이해하려면 상수를 이해해야 합니다. 대부분의 언어에서 상수는 아래 예와
개발자로서 우리는 프로그램을 실행하는 데 너무 많은 시간을 할애하여 프로그램이 종료되는 방식을 간과하기 쉽습니다. 그리고 중요합니다! 프로그램이 종료될 때 올바르게 작동하면 관리하기가 훨씬 쉬워지고 표준 devops 도구와 함께 작동할 가능성이 높아집니다. Ruby 프로그램을 종료하는 방법에는 여러 가지가 있습니다. 나는 그들 중 일부를 아래에 보여 주었다. 이 게시물에서 우리는 이들 각각에 대한 세부 정보와 앱이 제대로 작동하는 Unix 시민으로 만드는 데 어떻게 사용될 수 있는지 논의할 것입니다. # You can exit b
요즘은 #freeze를 보는 것이 일반적입니다. 루비 코드에서 사용됩니다. 그러나 왜 동결이 사용되는지 완전히 명확하지 않은 경우가 많습니다. 이 게시물에서는 개발자가 변수를 고정할 수 있는 가장 일반적인 이유를 살펴보겠습니다. 각 이유를 설명하기 위해 Rails 코드베이스 및 기타 인기 있는 오픈 소스 프로젝트에서 예제 코드를 발췌했습니다. 불변 상수 만들기 Ruby에서 상수는 변경 가능합니다. 조금 복잡하지만 코드는 이해하기 쉽습니다. 여기에서 문자열 상수를 만들고 여기에 다른 문자열을 추가합니다. MY_CONSTANT = f