-
Rubyでの例外の救済:入門書
AppSignalでは、Rubyアプリケーションのエラー追跡を提供しています。そのために、アプリケーションがスローするすべての例外をキャプチャし、発生したときに開発者に通知します。 例外処理を正しく行うのは難しい場合があります。この記事では、それがどのように機能するか、不適切な処理が引き起こす可能性のある問題、および例外を適切に救済する方法について説明します。 例外の救済 Rubyで例外を救済することで、問題が発生した瞬間にアプリケーションがクラッシュするのを防ぐことができます。 begin .. rescue ブロックでは、エラーが発生したときにアプリケーションの代替パスを指定できます。
-
Rubyで30行のHTTPサーバーを構築する
Webサーバー、および一般的なHTTPは、理解するのが難しいように思われるかもしれません。ブラウザはどのようにリクエストをフォーマットし、どのようにレスポンスをユーザーに送信しますか?このRubyMagicのエピソードでは、30行のコードでRubyHTTPサーバーを構築する方法を学習します。完了すると、サーバーがHTTP GETリクエストを処理し、それを使用してRackアプリを提供します。 HTTPとTCPの連携方法 TCPは、サーバーとクライアントがデータを交換する方法を説明するトランスポートプロトコルです。 HTTPは、WebサーバーがHTTPクライアントまたはWebブラウザーとデータ
-
Rubyでの文字のエスケープ
この投稿では、Rubyでの文字のエスケープについて説明します。いくつかのユースケースでは、文字をエスケープする方法、その仕組み、および完全にエスケープしないようにする方法を学習します。 \についてすべて知っていると思う場合 、必ずすべて読んで驚いてください... 文字列で文字をエスケープして、すぐに飛び込みましょう。 引用符のエスケープ Rubyで文字列を使用する場合、文字列を定義するために使用した引用符を文字列自体の中に入れる必要がある場合があります。そうする場合、バックスラッシュ \を使用して引用符文字をエスケープできます。 シンボル。 # Escape quotes in dou
-
ランニングラック:RubyHTTPサーバーがRailsアプリを実行する方法
Ruby Magicシリーズでは、ソフトウェアを分解して、内部でどのように機能するかを学ぶのが大好きです。それはすべてプロセスに関するものです。最終結果は、本番環境で使用するものではありません。Ruby言語とその人気のあるライブラリーの内部動作について学びます。新しい記事は月に1回程度発行されますので、このようなことに興味がある場合は、必ずニュースレターを購読してください。 Ruby Magicの以前のエディションでは、Rubyに30行のHTTPサーバーを実装しました。多くのコードを記述する必要なしに、HTTP GETリクエストを処理し、単純なRackアプリケーションを提供することができま
-
並行性の詳細:マルチプロセス
並行性の習得に関する以前のRubyMagicの記事では、Ruby開発者として利用できる並行性を実現する3つの方法を紹介しました。この記事は、各方法を深く掘り下げた3部構成のシリーズの最初の記事です。 最初に:マルチプロセス 。この方法では、マスタープロセスはそれ自体を複数のワーカープロセスにフォークします。マスターがワーカーを管理している間、ワーカープロセスが実際の作業を行います。 この記事の例で使用されている完全なソースコードはGitHubで入手できるため、自分で試すことができます。 チャットシステムを構築しましょう! チャットシステムを構築することは、並行性に飛び込むための良い方
-
並行性の詳細:マルチスレッド
Ruby Magicの前の版では、複数のプロセスを使用してチャットシステムを実装する方法を示しました。今回は、複数のスレッドを使用して同じことを行う方法を紹介します。 簡単な要約 基本的なセットアップの完全な説明が必要な場合は、前の記事を確認してください。ただし、すぐに思い出してください。チャットシステムは次のようになります。 以前に使用したのと同じクライアントを使用しています: # client.rb # $ ruby client.rb require 'socket' client = TCPSocket.open(ARGV[0], 2000) Thread.
-
並行性の詳細:イベントループ
並行性に関するシリーズの最後のRubyMagicの記事へようこそ。以前のエディションでは、複数のプロセスと複数のスレッドを使用してチャットサーバーを実装しました。今回は、イベントループを使用して同じことを行います。 要約 以前の記事で使用したのと同じクライアントと同じサーバー設定を使用します。私たちの目的は、次のようなチャットシステムを構築することです。 基本的な設定の詳細については、以前の記事を参照してください。この記事の例で使用されている完全なソースコードはGitHubで入手できるため、自分で試すことができます。 イベントループを使用したチャットサーバー チャットサーバーにイベントル
-
Rubyがコードをどのように解釈するかを見てみましょう
新しいRubyMagicの記事へようこそ!今回は、Rubyがコードをどのように解釈するか、そしてこの知識をどのように活用できるかを見ていきます。この投稿は、コードがどのように解釈されるか、そしてこれがどのようにコードの高速化につながるかを理解するのに役立ちます。 シンボル間の微妙な違い Rubyでの文字のエスケープに関する以前のRubyMagicの記事には、改行のエスケープに関する例がありました。 以下の例では、プラスの+を使用して、2つの文字列を複数の行にまたがる1つの文字列として組み合わせる方法を示しています。 記号またはバックスラッシュ付き\ 。 "foo" +
-
カスタムメトリックを使用してキャッシュヒットを追跡する
AppSignalを使用するアプリを実行しているすべてのサーバーは、サンプルとメトリックのコレクションを30秒ごとにPushAPIに送信します。 各リクエストには、データの送信元のアプリを判別するために使用するキーがあります。そのためには、データベースにクエリを実行して、着信リクエストごとにアプリを見つける必要があります。 1か月あたり300億件のリクエストがあり、AppSignalを高速化するためにクエリの数を減らす方法を常に模索しています。 データベースクラスターでのクエリの数を減らすために、キャッシュを実装しました。データベースからアプリをフェッチするたびに、それをMemcached
-
Rubyスタックトレースを読んで理解する
アプリケーションでエラーが発生すると、Rubyは例外を発生させ、スタックトレースを出力します。 ログに。この記事では、スタックトレースを読み取る方法と、それを使用してアプリケーションの例外の原因を特定する方法について説明します。 コールスタック メソッドを呼び出すたびに、Rubyはスタックフレームを配置します コールスタック (または「ランタイムスタック」ですが、単に「スタック」と呼ばれることもあります)。スタックフレームは、メソッドの引数、内部変数用のスペース、および呼び出し元のリターンアドレスを保持するメモリ割り当てです。 # divide.rb def divide(a, b) &
-
Railsでのデバッグ例外
Railsアプリケーションでエラーが発生した場合、例外とスタックトレースは、問題が発生した場所を見つけるのに役立ちます。どこで何が起こったのかを知った後、理由を見つける必要があります それは起こった。この記事では、バックトレースを使用してRailsアプリケーションのバグを見つける方法について説明します。 NoMethodError (undefined method `request_uri' for #<URI::Generic >): app/models/product.rb:8:in `download_image!' app/controllers/
-
Rubyのシンタックスシュガーメソッド
新しいRubyMagicの記事へようこそ!このエピソードでは、Rubyがシンタックスシュガーをどのように使用するかを見ていきます。 構文の一部をより表現力豊かにする、または読みやすくするため。最後に、Rubyのトリックのいくつかが内部でどのように機能するか、そしてこの砂糖を少し使用する独自のメソッドを作成する方法を理解します。 Rubyアプリを作成する場合、非標準と思われる方法でクラス属性、配列、ハッシュを操作するのが一般的です。属性を割り当て、配列またはハッシュから値をフェッチするメソッドをどのように定義しますか? Rubyは、これらのメソッドを呼び出すときにこれらのメソッドを機能させる
-
Rubyでのデータの検査
ほとんどの例外は、予期しないデータが他の方法で正常に機能するメソッドに渡されることによって発生するため、アプリケーションを介してデータの一部をトレースし、エラーの原因を見つけることが役立つ場合がよくあります。この記事では、RubyおよびRailsアプリケーションでのデータの検査について説明します。 プット 、 #inspect およびp Rubyのputs メソッドは、コンソールにメッセージを出力するために使用されます。 unknown = "This is a string" puts unknown 上記のスクリプトを実行すると、値が出力され、中身を確認できます
-
Rubyコードのベンチマーク
Rubyの標準ライブラリには、コードのパフォーマンスを測定するのに役立つベンチマークツールがあります。 2つの実装を比較して、どちらが最速かを判断するのに最も役立ちます。 この例では、文字列キー({"foo" => "bar"}など)を使用してハッシュを変換する必要があります。 記号付きのもの({:foo => "bar"}など) )。例全体を通して、英語のアルファベットの各文字にキーと値を含むハッシュを使用します。 入力せずにこのハッシュをすばやく生成するために、文字の範囲をテストハッシュに変換します。 inputに
-
Rubyの例外
例外 例外的なに関する情報を保持する特別なデータ構造です。 アプリケーションで発生している状態。例外は、特定の状況に対処する方法がわからないためにプログラムを実行し続けることができない場合に送信されるシグナルです。 Rubyでは、このようなシグナルの送信を発生と呼びます。 例外。 raise 'this is an exception' puts "This message won't be printed." 動作中の例外を確認する最も簡単な方法は、自分で例外を発生させることです。 raiseを使用する メッセージ付きのメソッドの場合、
-
Railsでのフラグメントキャッシング
Railsアプリケーションがリクエストを受け入れると、コントローラーは通常、モデルにリクエストされたデータを要求します。次に、モデルはそれをデータベースからフェッチし、コントローラーに返します。コントローラは最終的に、人間が読める形式でデータを表すビューをレンダリングします。 状況によっては、ビューのレンダリングはコストのかかる操作です。特に、ストアで利用可能なすべての商品のリストを表示する場合など、ビューに大量のデータを表示する必要がある場合はそうです。そのような場合、特にデータがあまり頻繁に変更されない場合は、返されたビューの一部をキャッシュすることで処理を高速化できます。 👋そし
-
システム負荷と負荷平均を理解する
topなどのツール 、 uptime 、 w AppSignalのホストメトリクスは、負荷平均と呼ばれるメトリクスを報告します 。このメトリックは、システムにかかっている負荷について、複数の時間枠で平均して示します。 $ uptime 10:14:14 up 60 days, 17:42, 1 user, load average: 0.44, 0.28, 0.25 通常、負荷平均は、 uptime の例のように、3つの数値として表示されます。 その上。結果の最後にある3つの数値は、直前の平均負荷を示しています( 0.44 )、過去5分間( 0.28 )、および最後の15( 0
-
Railsでのロシアの人形のキャッシュ
今日は、Railsの組み込みフラグメントキャッシングを超えてキャッシングをさらに改善するための戦術として、ロシアのドールキャッシングについて詳しく説明します。 フラグメントキャッシング Railsの組み込みフラグメントキャッシングを使用する場合、レンダリングされたビューの一部はビューフラグメントとして保存され、再度要求された場合に再利用されます。これらのキャッシュされたフラグメントは、古くなるまで再利用されます。 、つまり、フラグメントの作成後に表示されるデータが変更されたため、古くなっています。詳細をお読みになりたい場合は、この以前の投稿で、フラグメントキャッシングについてもう少し詳しく説
-
Rubyで例外を救出する
発生した例外をレスキューして、アプリケーションが呼び出しスタックの最上位に到達したときにアプリケーションがクラッシュするのを防ぐことができます。 Rubyでは、rescueを使用します そのためのキーワード。 Rubyで例外をレスキューするときに、レスキューする必要のある特定のエラークラスを指定できます。 begin raise 'This exception will be rescued!' rescue StandardError => e puts "Rescued: #{e.inspect}" end 注 :raiseを使用す
-
Railsの組み込みキャッシュストア:概要
新しいRailsアプリを生成するとき、キャッシュはすでに設定されています。これにより、cacheを使用して一部のビューフラグメントをラップするのと同じくらい迅速に開始できます。 ヘルパーまたはRails.cache.fetchの使用 外部APIの結果を保存します。キャッシュされたデータは、Railsのキャッシュストアの1つに保存されます。これにより、データをメモリ、Memcached、Redisに保持したり、ディスクに直接書き込んだりすることができます。 しかし、どの状況に最適なキャッシュストアはどれですか?この概要では、各オプションを見ていきます。 👋そして、この記事が気に入ったら、