Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Byebug、Rails、Powを使用したリモートデバッグ

byebugをこれまでに見たことがない場合は、チェックすることをお勧めします。これは、Ruby2.x用の優れたデバッガーです。その作者の言葉で:

Byebugは、Ruby2用の使いやすく機能豊富なデバッガーです。実行制御に新しいTracePointAPIを使用し、コールスタックナビゲーションに新しいDebug Inspector APIを使用するため、内部のコアソースに依存しません。 C拡張機能として開発されているため、高速です。また、完全なテストスイートがあるため、信頼性があります。

基本的なセットアップは非常に簡単です。宝石をインストールするだけです。 byebugを使用する場合 コード内の任意の場所でメソッドを実行すると、その時点で実行が停止し、デバッグコンソールに移動します。 pryを使用するように設定できます。

たとえば、次のようにデバッガを呼び出すことができます:

require 'byebug'

def my_method
  a = 1
  byebug
end

my_method()

そのファイルを実行すると、デバッガーにドロップされます。

Byebug、Rails、Powを使用したリモートデバッグ デバッガーがトリガーされると、インタラクティブシェルに移動します。

捕虜の問題

コマンドラインでアプリを実行できれば問題ありません。しかし、powを使用してローカルで提供するRailsアプリを開発している場合はどうなりますか?

Powは、ほとんどのアプリサーバーと同様に、バックグラウンドで実行されます。したがって、実行を停止してデバッガーを実行したとしても、デバッガーを操作することはできません。

幸い、byebugはリモートデバッグのメカニズムを提供します。

リモートデバッグに慣れていない場合、それは単純な概念です。 byebugメソッドが呼び出されると、対話型シェルにダンプする代わりに、デバッガーは独自の特別なサーバーを起動します。その後、コマンドラインクライアントを使用してこのデバッグサーバーに接続できます。

リモートデバッグはどのように見えますか?

まず、byebugメソッドをコントローラーアクションに呼び出します

class PagesController < ApplicationController
  def index
    if user_has_never_signed_in? && request.subdomain == "www"
      @hero_bg = ab_test("hero_bg", "control", "variable")
    else
      @hero_bg = "control"
    end

    byebug

  end
end

第二に、私はその行動を要求します。接続がハングしているようです。

Byebug、Rails、Powを使用したリモートデバッグ デバッガーをトリガーするWebリクエストが読み込まれません

最後に、byebugクライアントに切り替えます。このクライアントは、指定した時点でデバッガコンソールを表示しています。

Byebug、Rails、Powを使用したリモートデバッグ 動作中のbyebugリモートデバッガー

byebugを使用したリモートデバッグの設定

gemをまだインストールしていない場合は、先に進んでインストールしてください。

# Gemfile

gem "byebug", group: "development"

次に、powがrailsアプリを起動するたびに、byebugサーバーを起動する初期化子をrailsアプリに追加する必要があります。提供する必要がある唯一の実際のオプションは、ポート番号です。以下のコードでは、環境変数を介してそれを構成できます。

この初期化子を追加したら、アプリを再起動して、アプリが読み込まれていることを確認する必要があります。

# config/initializers/byebug.rb

if Rails.env.development?
  Byebug.start_server 'localhost', ENV.fetch("BYEBUG_SERVER_PORT", 1048).to_i
end

最後に、byebugクライアントを実行して、サーバーの場所を指定する必要があります。その後、クライアントは座ってデバッグトリガーが発生するのを待ちます。

別のポートを使用した場合は、ここでそれを置き換える必要があります。

bundle exec byebug -R localhost:1048

それでおしまい!デバッグを開始する時間です。


  1. Vue、Vuex、Railsを使用したフルスタックアプリケーションの構築

    スケーラビリティを念頭に置いてフルスタックアプリケーションを構築することは、特に、完全なタイプスクリプトをサポートする最新バージョンのVueおよびVuexを使用して構築する場合、威圧的になる可能性があります。この記事では、不健康な家畜への治療の処方を管理するCRUDアプリケーションを探索することで、APIリクエストとデータベースの相互作用を処理するVuex4.0を使用した状態管理からスケーラブルなフルスタックアプリケーションを構築するために知っておく必要のあるすべてを読者に教えます。バックエンドはRailsで構築され、フロントエンドによる統合のために基本的なCRUDAPIを公開します。 ほと

  2. Rails5でのAngularの使用

    あなたは前にその話を聞いたことがあります。分散型で完全に機能するバックエンドAPIと、通常のツールセットで作成されたフロントエンドで実行されているアプリケーションがすでにあります。 次に、Angularに移動します。または、AngularをRailsプロジェクトと統合する方法を探しているだけかもしれません。これは、この方法を好むためです。私たちはあなたを責めません。 このようなアプローチを使用すると、両方の世界を活用して、たとえばRailsとAngularのどちらの機能を使用してフォーマットするかを決定できます。 構築するもの 心配する必要はありません。このチュートリアルは、この目的のた