SidekiqとRedisをRubyonRailsアプリケーションに追加する方法

提供:Dev Guides
移動先:案内検索

序章

Ruby on Rails アプリケーションを開発する場合、非同期で実行する必要のあるアプリケーションタスクがあることに気付くかもしれません。 データの処理、バッチメールの送信、外部APIとのやり取りはすべて、バックグラウンドジョブと非同期で実行できる作業の例です。 バックグラウンドジョブを使用すると、時間のかかる可能性のあるタスクをバックグラウンド処理キューにオフロードし、元の要求/応答サイクルを解放することで、アプリケーションのパフォーマンスを向上させることができます。

Sidekiq は、Railsアプリケーションに実装できる最も広く使用されているバックグラウンドジョブフレームワークの1つです。 柔軟性とパフォーマンスで知られるメモリ内のKey-ValueストアであるRedisに支えられています。 SidekiqはRedisをジョブ管理ストアとして使用して1秒あたり数千のジョブを処理します。

このチュートリアルでは、RedisとSidekiqを既存のRailsアプリケーションに追加します。 処理するSidekiqワーカークラスとメソッドのセットを作成します。

  • プロジェクトリポジトリのCSVファイルからアプリケーションデータベースへの絶滅危惧種のサメ情報のバッチアップロード。
  • このデータの削除。

終了すると、ワーカーとジョブを使用してタスクを非同期で処理するデモアプリケーションが作成されます。 これは、このチュートリアルを出発点として使用して、独自のアプリケーションにワーカーとジョブを追加するための優れた基盤になります。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • Ubuntu18.04を実行しているローカルマシンまたは開発サーバー。 開発マシンには、管理者権限を持つroot以外のユーザーと、ufwで構成されたファイアウォールが必要です。 これを設定する方法については、 Ubuntu18.04を使用した初期サーバー設定のチュートリアルを参照してください。
  • Node.jsおよびnpmがローカルマシンまたは開発サーバーにインストールされています。 このチュートリアルでは、Node.jsバージョン10.17.0とnpmバージョン6.11.3を使用します。 Ubuntu 18.04にNode.jsとnpmをインストールする手順については、 Ubuntu18.04にNode.jsをインストールする方法の「PPAを使用したインストール」セクションの手順に従ってください。
  • ローカルマシンまたは開発サーバーにインストールされているYarnパッケージマネージャー。 公式ドキュメントのインストール手順に従うことができます。
  • Ubuntu18.04でrbenvを使用してRubyonRailsをインストールする方法の手順1〜4 に従って、ローカルマシンまたは開発サーバーにインストールされたRuby、 rbenv 、およびRails 。 このチュートリアルでは、Ruby 2.5.1 、rbenv 1.1.2 、およびRails 5.2.3を使用します。
  • Ruby onRailsアプリケーションステップ1に従ってSQLiteをインストールしました。 このチュートリアルでは、SQLite 3 3.22.0を使用します。
  • Ubuntu 18.04 にRedisをインストールして保護する方法のステップ1〜3 に従って、Redisをインストールします。 このチュートリアルでは、Redis 4.0.9を使用します。

ステップ1—プロジェクトのクローンを作成して依存関係をインストールする

最初のステップは、 DigitalOceanCommunityGitHubアカウントからrails-bootstrapリポジトリのクローンを作成することです。 このリポジトリには、ブートストラップをRuby on Railsアプリケーションに追加する方法で説明されているセットアップのコードが含まれています。このコードは、ブートストラップを既存のRails5プロジェクトに追加する方法を説明しています。

リポジトリをrails-sidekiqというディレクトリに複製します。

git clone https://github.com/do-community/rails-bootstrap.git rails-sidekiq

rails-sidekiqディレクトリに移動します。

cd rails-sidekiq

コードを操作するには、最初にプロジェクトの依存関係をインストールする必要があります。これは、Gemfileにリストされています。 SidekiqとRedisを使用するには、プロジェクトに sidekiqgemを追加する必要もあります。

nanoまたはお気に入りのエディターを使用して、プロジェクトのGemfileを開いて編集します。

nano Gemfile

メインプロジェクトの依存関係(開発の依存関係の上)の任意の場所にgemを追加します。

〜/ rails-sidekiq / Gemfile

. . . 
# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.1.0', require: false
gem 'sidekiq', '~>6.0.0'

group :development, :test do
. . .

gemの追加が完了したら、ファイルを保存して閉じます。

次のコマンドを使用して、gemをインストールします。

bundle install

redisgemsidekiqの要件としてインストールされていることが出力に表示されます。

次に、Yarnの依存関係をインストールします。 このRails5プロジェクトは、webpackでアセットを提供するように変更されているため、JavaScriptの依存関係はYarnによって管理されるようになりました。 これは、プロジェクトのpackage.jsonファイルにリストされている依存関係をインストールして検証する必要があることを意味します。

yarn installを実行して、これらの依存関係をインストールします。

yarn install

次に、データベースの移行を実行します。

rails db:migrate

移行が完了したら、アプリケーションをテストして、期待どおりに機能していることを確認できます。 ローカルで作業している場合は、次のコマンドを使用して、ローカルバンドルのコンテキストでサーバーを起動します。

bundle exec rails s

開発サーバーで作業している場合は、次のコマンドでアプリケーションを起動できます。

bundle exec rails s --binding=your_server_ip

localhost:3000またはhttp://your_server_ip:3000に移動します。 次のランディングページが表示されます。

新しいサメを作成するには、 Get Shark Info ボタンをクリックします。これにより、sharks/indexルートに移動します。

アプリケーションが機能していることを確認するために、いくつかのデモ情報をアプリケーションに追加できます。 NewSharkをクリックします。 プロジェクトの認証設定のおかげで、ユーザー名( sammy )とパスワード( shark )の入力を求められます。

New Shark ページで、 Name フィールドに「GreatWhite」を入力し、Factsフィールドに「Scary」を入力します。

サメの作成ボタンをクリックしてサメを作成します。 サメが作成されたことを確認したら、CTRL+Cでサーバーを強制終了できます。

これで、プロジェクトに必要な依存関係がインストールされ、その機能がテストされました。 次に、Railsアプリケーションにいくつかの変更を加えて、絶滅危惧種のサメのリソースを操作できます。

ステップ2—絶滅危惧種のサメ資源のコントローラーを生成する

絶滅危惧種のサメのリソースを活用するために、アプリケーションに新しいモデルを追加し、絶滅危惧種のサメに関する情報をユーザーに提示する方法を制御するコントローラーを追加します。 私たちの最終的な目標は、ユーザーがアプリケーションの全体的な機能をブロックすることなく、絶滅危惧種のサメに関する大量の情報をアップロードし、不要になったときにその情報を削除できるようにすることです。

まず、絶滅危惧種のサメのEndangeredモデルを作成しましょう。 データベーステーブルにサメの名前の文字列フィールドと、国際自然保護連合(IUCN)カテゴリの文字列フィールドを含めます。それぞれのサメが危険にさらされています。

最終的に、モデル構造は、バッチアップロードの作成に使用するCSVファイルの列と一致します。 このファイルはdbディレクトリにあり、次のコマンドでその内容を確認できます。

cat db/sharks.csv

このファイルには、73の絶滅危惧種のサメとそのIUCNステータスのリストが含まれています。

Endangeredモデルはこのデータと相関し、このCSVファイルから新しいEndangeredインスタンスを作成できるようになります。 次のコマンドを使用してモデルを作成します。

rails generate model Endangered name:string iucn:string

次に、indexアクションでEndangeredコントローラーを生成します。

rails generate controller endangered index

これにより、アプリケーションの機能を構築するための開始点が得られますが、Railsが生成したコントローラーファイルにカスタムメソッドを追加する必要もあります。

今すぐそのファイルを開きます:

nano app/controllers/endangered_controller.rb

Railsは、私たちが記入し始めることができる骨格の輪郭を私たちに提供してくれました。

まず、データを処理するために必要なルートを決定する必要があります。 generate controllerコマンドのおかげで、最初にindexメソッドを使用できます。 これは、indexビューと相関関係があり、絶滅危惧種のサメをアップロードするオプションをユーザーに提示します。

ただし、ユーザーがすでにサメをアップロードしている可能性がある場合にも対処する必要があります。 この場合、アップロードオプションは必要ありません。 Endangeredクラスのインスタンスがすでにいくつ存在するかを評価する必要があります。これは、バッチアップロードがすでに行われていることを複数が示しているためです。

データベースからEndangeredクラスの各インスタンスを取得するset_endangeredprivateメソッドを作成することから始めましょう。 次のコードをファイルに追加します。

〜/ rails-sidekiq / app / controllers / endangered_controller.rb

class EndangeredController < ApplicationController
  before_action :set_endangered, only: [:index, :data]

  def index
  end

  private

    def set_endangered
      @endangered = Endangered.all 
    end

end

before_actionフィルターは、@endangeredの値がindexおよびdataルートにのみ設定されるようにすることに注意してください。サメのデータ。

次に、次のコードをindexメソッドに追加して、アプリケーションのこの部分にアクセスするユーザーの正しいパスを決定します。

〜/ rails-sidekiq / app / controllers / endangered_controller.rb

class EndangeredController < ApplicationController
  before_action :set_endangered, only: [:index, :data]

  def index          
    if @endangered.length > 0
      redirect_to endangered_data_path
    else
      render 'index'
    end
  end
. . . 

Endangeredクラスのインスタンスが0を超える場合は、ユーザーをdataルートにリダイレクトします。ここで、ユーザーは作成したサメに関する情報を表示できます。 それ以外の場合は、indexビューが表示されます。

次に、indexメソッドの下に、dataメソッドを追加します。これは、dataビューに関連付けられます。

〜/ rails-sidekiq / app / controllers / endangered_controller.rb

. . . 
  def index          
    if @endangered.length > 0
      redirect_to endangered_data_path
    else
      render 'index'
    end
  end

  def data 
  end
. . .

次に、データのアップロード自体を処理するメソッドを追加します。 このメソッドをuploadと呼び、Sidekiqワーカークラスとメソッドを呼び出して、CSVファイルからのデータアップロードを実行します。 次のステップで、このワーカークラスAddEndangeredWorkerの定義を作成します。

今のところ、次のコードをファイルに追加して、Sidekiqワーカーを呼び出してアップロードを実行します。

〜/ rails-sidekiq / app / controllers / endangered_controller.rb

. . . 
  def data 
  end

  def upload
    csv_file = File.join Rails.root, 'db', 'sharks.csv'   
    AddEndangeredWorker.perform_async(csv_file)
    redirect_to endangered_data_path, notice: 'Endangered sharks have been uploaded!'
  end
. . .

AddEndangeredWorkerクラスでperform_asyncメソッドを呼び出し、CSVファイルを引数として使用することで、このコードはサメのデータとアップロードジョブがRedisに渡されるようにします。 セットアップするSidekiqワーカーは、ジョブキューを監視し、新しいジョブが発生したときに応答します。

perform_asyncを呼び出した後、uploadメソッドはdataパスにリダイレクトされ、ユーザーはアップロードされたサメを見ることができます。

次に、destroyメソッドを追加してデータを破棄します。 uploadメソッドの下に次のコードを追加します。

〜/ rails-sidekiq / app / controllers / endangered_controller.rb

. . . 
  def upload
    csv_file = File.join Rails.root, 'db', 'sharks.csv'   
    AddEndangeredWorker.perform_async(csv_file)
    redirect_to endangered_data_path, notice: 'Endangered sharks have been uploaded!'
  end

  def destroy
    RemoveEndangeredWorker.perform_async
    redirect_to root_path
  end
. . . 

uploadメソッドと同様に、destroyメソッドには、RemoveEndangeredWorkerクラスに対するperform_async呼び出しが含まれています。これは、作成するもう1つのSidekiqワーカーです。 このメソッドを呼び出した後、ユーザーをルートアプリケーションパスにリダイレクトします。

完成したファイルは次のようになります。

〜/ rails-sidekiq / app / controllers / endangered_controller.rb

class EndangeredController < ApplicationController
  before_action :set_endangered, only: [:index, :data]

  def index          
    if @endangered.length > 0
      redirect_to endangered_data_path
    else
      render 'index'
    end
  end

  def data 
  end

  def upload
    csv_file = File.join Rails.root, 'db', 'sharks.csv'   
    AddEndangeredWorker.perform_async(csv_file)
    redirect_to endangered_data_path, notice: 'Endangered sharks have been uploaded!'
  end

  def destroy
    RemoveEndangeredWorker.perform_async
    redirect_to root_path
  end

  private

    def set_endangered
      @endangered = Endangered.all 
    end 

end

編集が終了したら、ファイルを保存して閉じます。

アプリケーションのルートを固めるための最後のステップとして、ルート宣言が存在するファイルであるconfig/routes.rbのコードを変更します。

今すぐそのファイルを開きます:

nano config/routes.rb

現在、ファイルは次のようになっています。

〜/ rails-sidekiq / config / routers.rb

Rails.application.routes.draw do
  get 'endangered/index'
  get 'home/index'
  resources :sharks do
          resources :posts
  end
  root 'home#index'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

コントローラで定義したルートdataupload、およびdestroyを含めるように、ファイルを更新する必要があります。 dataルートはGETリクエストと一致してサメのデータを取得しますが、uploadおよびdestroyルートはそのデータをアップロードして破棄するPOSTリクエストにマッピングされます。

次のコードをファイルに追加して、これらのルートを定義します。

〜/ rails-sidekiq / config / routers.rb

Rails.application.routes.draw do
  get 'endangered/index'
  get 'endangered/data', to: 'endangered#data'
  post 'endangered/upload', to: 'endangered#upload'
  post 'endangered/destroy', to: 'endangered#destroy'
  get 'home/index'
  resources :sharks do
          resources :posts
  end
  root 'home#index'
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

編集が終了したら、ファイルを保存して閉じます。

Endangeredモデルとコントローラーを配置したら、Sidekiqワーカークラスの定義に進むことができます。

ステップ3—Sidekiqワーカーの定義

コントローラのSidekiqワーカーでperform_asyncメソッドを呼び出しましたが、それでもワーカー自体を作成する必要があります。

まず、ワーカー用のworkersディレクトリを作成します。

mkdir app/workers

AddEndangeredWorkerワーカーのファイルを開きます。

nano app/workers/add_endangered_worker.rb

このファイルには、CSVファイルのデータを操作できるようにするコードを追加します。 まず、クラスを作成するファイルにコードを追加し、 Ruby CSVライブラリを含め、このクラスがSidekiqワーカーとして機能することを確認します。

〜/ rails-sidekiq / app / workers / add_endangered_worker.rb

class AddEndangeredWorker
  require 'csv'
  include Sidekiq::Worker
  sidekiq_options retry: false

end

また、失敗した場合にSidekiqがアップロードを再試行しないようにするために、retry: falseオプションも含まれています。

次に、perform関数のコードを追加します。

〜/ rails-sidekiq / app / workers / add_endangered_worker.rb

class AddEndangeredWorker
  require 'csv'
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform(csv_file)
    CSV.foreach(csv_file, headers: true) do |shark|
    Endangered.create(name: shark[0], iucn: shark[1])
  end
 end

end

performメソッドは、コントローラーで定義されたperform_asyncメソッドから引数を受け取るため、引数の値を揃えることが重要です。 ここでは、コントローラーで定義した変数であるcsv_fileを渡し、CSVライブラリのforeachメソッドを使用してファイルの値を読み取ります。 このループにheaders: trueを設定すると、ファイルの最初の行がヘッダーの行として扱われるようになります。

次に、ブロックはファイルからEndangeredモデルに設定した列nameおよびiucnに値を読み取ります。 このループを実行すると、CSVファイルの各エントリに対してEndangeredインスタンスが作成されます。

編集が終了したら、ファイルを保存して閉じます。

次に、このデータの削除を処理するワーカーを作成します。 RemoveEndangeredWorkerクラスのファイルを開きます。

nano app/workers/remove_endangered_worker.rb

コードを追加してクラスを定義し、CSVライブラリを使用してSidekiqワーカーとして機能するようにします。

〜/ rails-sidekiq / app / workers / remove_endangered_worker.rb

class RemoveEndangeredWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

end

次に、performメソッドを追加して、絶滅危惧種のサメデータの破壊を処理します。

〜/ rails-sidekiq / app / workers / remove_endangered_worker.rb

class RemoveEndangeredWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform
    Endangered.destroy_all
  end

end

performメソッドは、Endangeredクラスでdestroy_allを呼び出します。これにより、クラスのすべてのインスタンスがデータベースから削除されます。

編集が終了したら、ファイルを保存して閉じます。

ワーカーを配置したら、endangeredビューのレイアウト、およびindexおよびdataビューのテンプレートの作成に進み、ユーザーがアップロードして表示できるようにします。絶滅危惧種のサメ。

ステップ4—レイアウトとビューテンプレートを追加する

ユーザーが絶滅危惧種のサメの情報を楽しむためには、endangeredコントローラーで定義されたビューのレイアウトと、indexおよびdataビュー。

現在、このアプリケーションは、app/views/layouts/application.html.erbにあるアプリケーション全体のレイアウト、ナビゲーションパーシャル、およびsharksビューのレイアウトを使用しています。 アプリケーションレイアウトはコンテンツブロックをチェックします。これにより、ユーザーが使用しているアプリケーションの部分に基づいてさまざまなレイアウトを読み込むことができます。home indexページの場合、1つのレイアウトが表示されます。 、および個々のサメに関連するビューについては、別のサメが表示されます。

sharksレイアウトは、endangeredビューに再利用できます。これは、この形式がサメのデータをまとめて表示する場合にも機能するためです。

sharksレイアウトファイルをコピーして、endangeredレイアウトを作成します。

cp app/views/layouts/sharks.html.erb app/views/layouts/endangered.html.erb

次に、indexおよびdataビューのビューテンプレートの作成に取り組みます。

最初にindexテンプレートを開きます。

nano app/views/endangered/index.html.erb

ボイラープレートコードを削除し、代わりに次のコードを追加します。これにより、ユーザーは絶滅危惧種のカテゴリに関する一般的な情報を入手でき、絶滅危惧種のサメに関する情報をアップロードするオプションが表示されます。

〜/ rails-sidekiq / app / views / endangered / index.html.erb

<p id="notice"><%= notice %></p>

<h1>Endangered Sharks</h1>

<p>International Union for Conservation of Nature (ICUN) statuses: <b>vu:</b> Vulnerable, <b>en:</b> Endangered, <b>cr:</b> Critically Endangered </p>

<br>

  <%= form_tag endangered_upload_path do %>
  <%= submit_tag "Import Endangered Sharks" %>
  <% end %>

  <br>

<%= link_to 'New Shark', new_shark_path, :class => "btn btn-primary btn-sm" %> <%= link_to 'Home', home_index_path, :class => "btn btn-primary btn-sm" %>

form_tagは、アップロード用に定義したルートであるendangered_upload_pathに投稿アクションをポイントすることで、データのアップロードを可能にします。 submit_tagで作成された送信ボタンは、ユーザーに"Import Endangered Sharks"の入力を求めます。

このコードに加えて、ICUNコードに関する一般的な情報が含まれているため、ユーザーは表示されるデータを解釈できます。

編集が終了したら、ファイルを保存して閉じます。

次に、dataビューのファイルを開きます。

nano app/views/endangered/data.html.erb

次のコードを追加します。これにより、絶滅危惧種のサメのデータを含むテーブルが追加されます。

〜/ rails-sidekiq / app / views / endangered / data.html.erb

<p id="notice"><%= notice %></p>

<h1>Endangered Sharks</h1>

<p>International Union for Conservation of Nature (ICUN) statuses: <b>vu:</b> Vulnerable, <b>en:</b> Endangered, <b>cr:</b> Critically Endangered </p>

<div class="table-responsive">
<table class="table table-striped table-dark">
  <thead>
    <tr>
      <th>Name</th>
      <th>IUCN Status</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @endangered.each do |shark| %>
      <tr>
        <td><%= shark.name %></td>
        <td><%= shark.iucn %></td>
      </tr>
    <% end %>
  </tbody>
</table>
</div>

<br>

  <%= form_tag endangered_destroy_path do %>
  <%= submit_tag "Delete Endangered Sharks" %>
  <% end %>

  <br>

<%= link_to 'New Shark', new_shark_path, :class => "btn btn-primary btn-sm" %> <%= link_to 'Home', home_index_path, :class => "btn btn-primary btn-sm" %>

このコードには、ICUNステータスコードと、出力されたデータのブートストラップテーブルが含まれています。 @endangered変数をループすることにより、各サメの名前とICUNステータスをテーブルに出力します。

表の下に、form_tagssubmit_tagsの別のセットがあり、ユーザーに"Delete Endangered Sharks"へのオプションを提供することでdestroyパスに投稿します。

編集が終了したら、ファイルを保存して閉じます。

ビューに加える最後の変更は、homeコントローラーに関連付けられたindexビューになります。 このビューがconfig/routes.rbでアプリケーションのルートとして設定されていることを思い出してください。

このファイルを開いて編集します。

nano app/views/home/index.html.erb

Sharks are ancientと記載されている行の列を見つけます。

〜/ rails-sidekiq / app / views / home / index.html.erb

. . . 
        <div class="col-lg-6">
            <h3>Sharks are ancient</h3>
            <p>There is evidence to suggest that sharks lived up to 400 million years ago.
            </p>
        </div>
    </div>
</div>

次のコードをファイルに追加します。

〜/ rails-sidekiq / app / views / home / index.html.erb

. . . 
        <div class="col-lg-6">
            <h3>Sharks are ancient and SOME are in danger</h3>
            <p>There is evidence to suggest that sharks lived up to 400 million years ago. Without our help, some could disappear soon.</p>
            <p><%= button_to 'Which Sharks Are in Danger?', endangered_index_path, :method => :get,  :class => "btn btn-primary btn-sm"%>
            </p>
        </div>
    </div>
</div>

最初に強力なメッセージを共有し、次にendangeredindexルート。ユーザーは、アプリケーションのその部分にアクセスできます。 そこから、絶滅危惧種のサメの情報をアップロードして表示できるようになります。

編集が終了したら、ファイルを保存して閉じます。

コードを配置したら、アプリケーションを起動してサメをアップロードする準備が整います。

ステップ5—Sidekiqを起動してアプリケーションをテストする

アプリケーションを開始する前に、データベースで移行を実行し、Sidekiqを開始してワーカーを有効にする必要があります。 Redisはすでにサーバー上で実行されているはずですが、確認することができます。 これらすべてが整ったら、アプリケーションをテストする準備が整います。

まず、Redisが実行されていることを確認します。

systemctl status redis

次のような出力が表示されます。

Output● redis-server.service - Advanced key-value store
   Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-11-12 20:37:13 UTC; 1 weeks 0 days ago

次に、データベースの移行を実行します。

rails db:migrate

bundle exec sidekiqコマンドを使用して、現在のプロジェクトバンドルのコンテキストでSidekiqを起動できるようになりました。

bundle exec sidekiq

Sidekiqがジョブを処理する準備ができていることを示す次のような出力が表示されます。

Output

               m,
               `$b
          .ss,  $$:         .,d$
          `$$P,d$P'    .,md$P"'
           ,$$$$$b/md$$$P^'
         .d$$$$$$/$$$P'
         $$^' `"/$$$'       ____  _     _      _    _
         $:     ,$$:       / ___|(_) __| | ___| | _(_) __ _
         `b     :$$        \___ \| |/ _` |/ _ \ |/ / |/ _` |
                $$:         ___) | | (_| |  __/   <| | (_| |
                $$         |____/|_|\__,_|\___|_|\_\_|\__, |
              .d$$                                       |_|
      

2019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: Running in ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
2019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: See LICENSE and the LGPL-3.0 for licensing details.
2019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
2019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: Booting Sidekiq 6.0.3 with redis options {:id=>"Sidekiq-server-PID-17621", :url=>nil}
2019-11-19T21:43:00.543Z pid=17621 tid=gpiqiesdl INFO: Starting processing, hit Ctrl-C to stop

2番目のターミナルウィンドウを開き、rails-sidekiqディレクトリに移動して、アプリケーションサーバーを起動します。

アプリケーションをローカルで実行している場合は、次のコマンドを使用します。

bundle exec rails s

開発サーバーを使用している場合は、以下を実行します。

bundle exec rails s --binding=your_server_ip

ブラウザでlocalhost:3000またはhttp://your_server_ip:3000に移動します。 次のランディングページが表示されます。

どのサメが危険にさらされていますか?ボタンをクリックします。 絶滅危惧種のサメをアップロードしていないため、endangeredindexビューに移動します。

絶滅危惧種のサメのインポートをクリックして、サメをインポートします。 サメが輸入されたことを知らせるステータスメッセージが表示されます。

インポートの開始も表示されます。 ページを更新して、テーブル全体を表示します。

Sidekiqのおかげで、絶滅危惧種のサメの大量のバッチアップロードは、ブラウザをロックしたり、他のアプリケーション機能に干渉したりすることなく成功しました。

ページの下部にあるホームボタンをクリックすると、アプリケーションのメインページに戻ります。

ここから、どのサメが危険にさらされていますか?をもう一度クリックします。 すでにサメをアップロードしているので、これでdataビューに直接移動します。

削除機能をテストするには、表の下にある絶滅危惧種のサメの削除ボタンをクリックします。 もう一度ホームページにリダイレクトされます。 どのサメが危険にさらされていますか?をもう一度クリックすると、indexビューに戻り、サメを再度アップロードするオプションが表示されます。

これで、アプリケーションはSidekiqワーカーを使用して実行されます。これにより、ジョブを処理し、ユーザーがアプリケーションを適切に操作できるようになります。

結論

これで、Sidekiqが有効になっているRailsアプリケーションが機能するようになりました。これにより、コストのかかる操作をSidekiqが管理し、Redisがサポートするジョブキューにオフロードできます。 これにより、開発中にサイトの速度と機能を向上させることができます。

Sidekiqについて詳しく知りたい場合は、docsから始めるとよいでしょう。

Redisの詳細については、Redisリソースのライブラリをご覧ください。 製品ドキュメントを参照して、DigitalOceanでマネージドRedisクラスターを実行する方法についても学ぶことができます。