Tutorial

Sidekiq und Redis einer Ruby-on-Rails-Anwendung hinzufügen

Published on May 1, 2020
Deutsch
Sidekiq und Redis einer Ruby-on-Rails-Anwendung hinzufügen

Einführung

Bei der Entwicklung einer Ruby-on-Rails-Anwendung stellen Sie möglicherweise fest, dass Sie Anwendungsaufgaben haben, die asynchron ausgeführt werden sollten. Die Verarbeitung von Daten, das Versenden von Batch-E-Mails oder die Interaktion mit externen APIs sind Beispiele für Arbeiten, die asynchron mit Hintergrundjobs durchgeführt werden können. Die Verwendung von Hintergrundjobs kann die Leistung Ihrer Anwendung verbessern, indem möglicherweise zeitintensive Aufgaben in eine Hintergrundverarbeitungs-Warteschlange ausgelagert werden, wodurch der ursprüngliche Anfrage-/Antwort-Zyklus entlastet wird.

Sidekiq ist eines der am häufigsten verwendeten Hintergrundjob-Frameworks, das Sie in einer Rails-Anwendung implementieren können. Es wird von Redis unterstützt, einem In-Memory-Schlüsselwertspeicher, der für seine Flexibilität und Leistung bekannt ist. Sidekiq verwendet Redis als Aufgabenmanagementspeicher, um pro Sekunde Tausende von Aufgaben zu verarbeiten.

In diesem Tutorial fügen Sie Redis und Sidekiq zu einer bestehenden Rails-Anwendung hinzu. Sie werden einen Satz von Sidekiq Worker-Klassen und -Verfahren erstellen, um Folgendes zu bewältigen:

  • Einen Batch-Upload von Informationen über bedrohte Haie in die Anwendungsdatenbank aus einer CSV-Datei im Projekt-Repository.
  • Die Entfernung dieser Daten.

Wenn Sie fertig sind, haben Sie eine Demo-Anwendung, die Workers und Jobs verwendet, um Aufgaben asynchron zu verarbeiten. Dieses Tutorial ist ein guter Startpunkt, damit Sie später Worker und Jobs zu Ihrer eigenen Anwendung hinzufügen können.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

Schritt 1 – Klonen des Projekts und Installieren von Abhängigkeiten

Unser erster Schritt besteht darin, das Repository rails-bootstrap aus dem DigitalOcean Community GitHub-Konto zu klonen. Dieses Repository enthält den Code aus dem Setup, das in „Hinzufügen von Sidekiq und Redis zu einer Ruby-on-Rails-Anwendung“ beschrieben wird. Dort wird erklärt, wie Bootstrap zu einem bestehenden Rails 5-Projekt hinzugefügt wird.

Klonen Sie das Repository in ein Verzeichnis namens rails-sidekiq:

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

Navigieren Sie zum Verzeichnis rails-sidekiq:

  1. cd rails-sidekiq

Um mit dem Code arbeiten zu können, müssen Sie zunächst die Abhängigkeiten des Projekts installieren, die in seiner Gemfile aufgelistet sind. Um mit Sidekiq und Redis arbeiten zu können, müssen Sie dem Projekt auch das Gem sidekiq hinzufügen.

Öffnen Sie das Gemfile des Projekts zur Bearbeitung mit nano oder Ihrem bevorzugten Editor:

  1. nano Gemfile

Fügen Sie das Gem an beliebiger Stelle in die Abhängigkeiten des Hauptprojekts ein (oberhalb der Entwicklungsabhängigkeiten):

~/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
. . .

Speichern und schließen Sie die Datei, wenn Sie mit dem Hinzufügen des Gems fertig sind.

Verwenden Sie den folgenden Befehl, um die Gems zu installieren:

  1. bundle install

Sie werden in der Ausgabe sehen, dass das Gem redis auch als Erfordernis für sidekiq installiert ist.

Als Nächstes installieren Sie Ihre Yarn-Abhängigkeiten. Da dieses Rails 5-Projekt modifiziert wurde, um Assets mit webpack bereitzustellen, werden seine JavaScript-Abhängigkeiten nun von Yarn verwaltet. Das bedeutet es ist notwendig, die in der Datei package.json des Projekts aufgeführten Abhängigkeiten zu installieren und zu verifizieren.

Führen Sie yarn install aus, um diese Abhängigkeiten zu installieren:

  1. yarn install

Führen Sie als Nächstes Ihre Datenbankmigration durch:

  1. rails db:migrate

Sobald Ihre Migrationen abgeschlossen sind, können Sie die Anwendung testen, um sicherzustellen, dass sie wie erwartet funktioniert. Starten Sie Ihren Server im Kontext Ihres lokalen Bundles mit dem folgenden Befehl, wenn Sie lokal arbeiten:

  1. bundle exec rails s

Wenn Sie auf einem Entwicklungsserver arbeiten, können Sie die Anwendung starten mit:

  1. bundle exec rails s --binding=your_server_ip

Navigieren Sie zu localhost:3000 oder http://your_server_ip:3000. Sie sehen die folgende Startseite:

Anwendungs-Startseite

Um einen neuen Hai zu erstellen, klicken Sie auf die Schaltfläche Get Shark Info, die Sie zu der Route sharks/index führt:

Sharks Index-Route

Um zu verifizieren, dass die Anwendung funktioniert, können wir ihr einige Demo-Informationen anhängen. Klicken Sie auf New Shark. Dank der Authentifizierungseinstellungen des Projekts werden Sie zur Eingabe des Benutzernamens (sammy) und Passworts (shark) aufgefordert.

Geben Sie auf der Seite New Shark unter Name „Great White“ und unter Facts „Scary“ ein:

Hai erstellen

Klicken Sie auf die Schaltfläche Create Shark, um den Shark zu erstellen. Sobald Sie sehen, dass Ihr Hai erstellt wurde, können Sie den Server mit STRG+C beenden.

Sie haben nun die notwendigen Abhängigkeiten für Ihr Projekt installiert und seine Funktionalität getestet. Als Nächstes können Sie einige Änderungen der Rails-Anwendung vornehmen, um mit Ihren Ressourcen für bedrohte Haie zu arbeiten.

Schritt 2 — Generieren eines Controllers für Ressourcen für bedrohte Haie

Um mit unseren Ressourcen für bedrohte Haie zu arbeiten, fügen wir der Anwendung ein neues Modell und einen Controller hinzu, der steuert, wie den Benutzern Informationen über bedrohte Haie präsentiert werden. Unser ultimatives Ziel ist, den Benutzern das Hochladen einer großen Menge von Informationen über bedrohte Haie zu ermöglichen, ohne die Gesamtfunktionalität unserer Anwendung zu blockieren, und diese Informationen zu löschen, wenn sie sie nicht mehr benötigen.

Erstellen wir zunächst ein Modell Endangered für unsere bedrohten Haie. Wir werden ein Zeichenfolgenfeld für den Hainamen in unsere Datenbanktabelle aufnehmen und ein weiteres Zeichenfolgenfeld für die Kategorien der International Union for the Conservation of Nature (IUCN), die den Grad der Gefährdung der einzelnen Haie bestimmen.

Letztendlich entspricht unsere Modellstruktur den Spalten in der CSV-Datei, die wir zur Erstellung unseres Batch-Uploads verwenden werden. Diese Datei befindet sich im Verzeichnis db und Sie können ihren Inhalt mit dem folgenden Befehl überprüfen:

  1. cat db/sharks.csv

Die Datei enthält eine Liste von 73 bedrohten Haien und ihren IUCN-Status – vu für gefährdet, en für bedroht und cr für vom Aussterben bedroht.

Unser Modell Endangered wird mit diesen Daten übereinstimmen, sodass wir neue Instanzen Endangered aus dieser CSV-Datei erstellen können. Erstellen Sie das Modell mit dem folgenden Befehl:

  1. rails generate model Endangered name:string iucn:string

Erstellen Sie als Nächstes einen Controller Endangered mit einer Aktion index:

  1. rails generate controller endangered index

Dadurch erhalten wir einen Ausgangspunkt, um die Funktionalität unserer Anwendung auszubauen, obwohl wir auch benutzerdefinierte Methoden zu der Controller-Datei hinzufügen müssen, die Rails für uns generiert hat.

Öffnen Sie nun diese Datei:

  1. nano app/controllers/endangered_controller.rb

Rails hat uns ein Grundgerüst zur Verfügung gestellt, das wir nun ausfüllen können.

Zunächst müssen wir bestimmen, welche Routen wir für die Arbeit mit unseren Daten benötigen. Dank dem Befehl generate controller haben wir eine Methode index, mit der wir beginnen können. Diese wird mit einer Ansicht index korrelieren, in der wir den Benutzern die Möglichkeit bieten werden, bedrohte Haie hochzuladen.

Wir werden aber auch Fälle bearbeiten wollen, in denen Benutzer die Haie möglicherweise bereits hochgeladen haben. In diesem Fall benötigen sie keine Upload-Option. Wir werden irgendwie beurteilen müssen, wie viele Instanzen der Klasse Endangered bereits existieren, da mehr als eine darauf hinweist, dass der Batch-Upload bereits stattgefunden hat.

Beginnen wir mit der Erstellung einer Methode private set_endangered, die jede Instanz unserer Klasse Endangered aus der Datenbank abrufen wird. Fügen Sie den folgenden Code zur Datei hinzu:

~/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

Beachten Sie, dass der Filter before_action sicherstellt, dass der Wert von @endangered nur für die Routen index und data festgelegt ist. Dort verarbeiten wir die Daten über bedrohte Haie.

Fügen Sie als Nächstes den folgenden Code zu der Methode index hinzu, um den richtigen Pfad für Benutzer zu bestimmen, die diesen Teil der Anwendung besuchen:

~/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
. . .

Wenn mehr als 0 Instanzen unserer Klasse Endangered vorhanden sind, leiten wird die Benutzer auf die Route data um, wo sie Informationen über die von ihnen erstellten Haie einsehen können. Andernfalls sehen sie die Ansicht index.

Fügen Sie als Nächstes unter die Methode index eine Methode data hinzu, die mit der Ansicht data korreliert:

~/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
. . .

Als Nächstes fügen wir eine Methode hinzu, um den Daten-Upload selbst zu verarbeiten. Wir nennen diese Methode upload und sie wird eine Sidekiq Worker-Klasse und -methode aufrufen, um den Daten-Upload aus der CSV-Datei durchzuführen. Im nächsten Schritt erstellen wir die Definition für diese Worker-Klasse, AddEndangeredWorker.

Für den Moment fügen Sie den folgenden Code zu der Datei hinzu, um den Sidekiq Worker aufzurufen, der den Upload ausführt:

~/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
. . .

Durch den Aufruf der Methode perform_async in der Klasse AddEndangeredWorker mit der CSV-Datei als Argument, stellt dieser Code sicher, dass die Haidaten und der Upload-Job an Redis übergeben werden. Die Sidekiq Workers, die wir einrichten werden, überwachen die Job-Warteschlange und reagieren, wenn neue Jobs entstehen.

Nach dem Aufruf von perform_async leitet unsere Methode upload zu dem Pfad data um, wo Benutzer die hochgeladenen Haie einsehen können.

Als Nächstes fügen wir eine Methode destroy zur Zerstörung der Daten hinzu. Fügen Sie den folgenden Code unter die Methode upload hinzu:

~/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
. . .

Wie unsere Methode upload beinhaltet unsere Methode destroy einen Aufruf perform_async der Klasse RemoveEndangeredWorker – den anderen Sidekiq Worker, den wir erstellen werden. Nach dem Aufruf dieser Methode leitet sie die Benutzer zu dem Stammanwendungspfad um.

Die fertige Datei sieht ungefähr so aus:

~/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

Wenn die Bearbeitung abgeschlossen wurde, speichern und schließen Sie die Datei.

Als letzten Schritt zur Verfestigung der Routen unserer Anwendung werden wir den Code config/routes.rb der Datei, in der sich unsere Routendeklarationen befinden, ändern.

Öffnen Sie nun diese Datei:

  1. nano config/routes.rb

Die Datei sieht derzeit wie folgt aus:

~/rails-sidekiq/config/routes.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

Wir müssen die Datei aktualisieren, um die in unserem Controller definierten Routen aufzunehmen: data, upload und destroy. Unsere Route data wird mit einer GET-Anforderung zum Abrufen der Haifischdaten übereinstimmen, während unsere Routen upload und destroy den POST-Anforderungen zugeordnet werden, die diese Daten hochladen und zerstören.

Fügen Sie den folgenden Code zu der Datei hinzu, um diese Routen zu definieren:

~/rails-sidekiq/config/routes.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

Wenn die Bearbeitung abgeschlossen wurde, speichern und schließen Sie die Datei.

Nachdem Sie Ihr Modell Endangered und Ihre Controller eingerichtet haben, können Sie nun mit der Definition Ihrer Sidekiq Worker-Klassen fortfahren.

Schritt 3 – Definieren von Sidekiq Workers

Wir haben die Methode perform_async für unsere Sidekiq Worker in unserem Controller aufgerufen, aber wir müssen noch die Worker selbst erstellen.

Erstellen Sie zunächst ein Verzeichnis workers für die Worker:

  1. mkdir app/workers

Öffnen Sie eine Datei für den Worker AddEndangeredWorker:

  1. nano app/workers/add_endangered_worker.rb

Wir fügen in dieser Datei Code ein, der uns die Arbeit mit den Daten in unserer CSV-Datei ermöglicht. Zunächst fügen wir der Datei Code hinzu, der die Klasse erstellt, die Ruby-CSV-Bibliothek einbezieht und sicherstellt, dass diese Klasse als Sidekiq Worker funktioniert:

~/rails-sidekiq/app/workers/add_endangered_worker.rb
class AddEndangeredWorker
  require 'csv'
  include Sidekiq::Worker
  sidekiq_options retry: false

end

Wir fügen auch die Option retry: false ein, um sicherzustellen, dass Sidekiq den Upload im Falle eines Fehlschlags nicht erneut versucht.

Fügen Sie als Nächstes den Code für die Funktion perform hinzu:

~/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

Die Methode perform empfängt Argumente von der im Controller definierten Methode perform_async. Daher ist es wichtig, dass die Argumentwerte abgeglichen sind. Hier übergeben wir in csv_file, die in dem Controller definierte Variable und verwenden die Methode foreach aus der CSV-Bibliothek, um die Werte in der Datei zu lesen. Das Setzen von headers: true für diese Schleife stellt sicher, dass die erste Zeile der Datei als eine Zeile von Headers behandelt wird.

Der Block liest dann die Werte von der Datei in die Spalten, die wir für unser Modell Endangered festgelegt haben: name und iucn. Durch Ausführung dieser Schleife werden für jeden der Einträge in unserer CSV-Datei Instanzen Endangered erstellt.

Wenn Sie die Bearbeitung abgeschlossen haben, speichern und schließen Sie die Datei.

Als Nächstes erstellen wir einen Worker, der sich um das Löschen dieser Daten kümmert. Öffnen Sie eine Datei für die Klasse RemoveEndangeredWorker:

  1. nano app/workers/remove_endangered_worker.rb

Fügen Sie den Code zur Definition der Klasse hinzu und stellen Sie sicher, dass sie die CSV-Bibliothek verwendet und als Sidekiq Worker funktioniert:

~/rails-sidekiq/app/workers/remove_endangered_worker.rb
class RemoveEndangeredWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

end

Fügen Sie als Nächstes eine Methode perform hinzu, um die Zerstörung der Daten von bedrohten Haien zu handhaben:

~/rails-sidekiq/app/workers/remove_endangered_worker.rb
class RemoveEndangeredWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform
    Endangered.destroy_all
  end

end

Die Methode perform ruft destroy_all in der Klasse Endangered auf, wodurch alle Instanzen der Klasse aus der Datenbank entfernt werden.

Wenn die Bearbeitung abgeschlossen wurde, speichern und schließen Sie die Datei.

Nachdem Sie Ihre Worker eingerichtet haben, können Sie mit der Erstellung eines Layouts für Ihre Ansichten endangered und von Vorlagen für Ihre Ansichten index und data fortfahren, sodass Benutzer bedrohte Haie hochladen und ansehen können.

Schritt 4 – Hinzufügen von Layouts und Ansichtsvorlagen

Damit Benutzer in den Genuss ihrer Informationen über bedrohte Haie kommen, müssen wir uns mit zwei Dingen befassen: dem Layout für die in unserem Controller endangered definierten Ansichten und mit den Ansichtsvorlagen für die Ansichten index und data.

Unsere Anwendung verwendet derzeit ein anwendungsweites Layout, das sich unter app/views/layouts/application.html.erb befindet, eine Navigations-Partiale und ein Layout für die Ansichten sharks. Das Anwendungslayout prüft, ob ein Inhaltsblock vorhanden ist, der das Laden verschiedener Layouts ermöglicht, je nachdem, mit welchem Teil der Anwendung sich unsere Benutzer beschäftigen: für die Seite home index sehen sie ein Layout und für alle Ansichten über individuelle Haie ein anderes.

Wir können das Layout sharks für unsere Ansichten endangered neu verwenden, da dieses Format auch für die Darstellung von Haidaten in großen Mengen funktioniert.

Kopieren Sie die Layoutdatei sharks, um ein Layout für endangered zu erstellen:

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

Als Nächstes werden wir an der Erstellung von Ansichtenvorlagen für unsere Ansichten index und data arbeiten.

Öffnen Sie zuerst die Vorlage index:

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

Löschen Sie den Boilerplate-Code und fügen Sie stattdessen den folgenden Code hinzu, der den Benutzern einige allgemeine Informationen über die bedrohten Kategorien gibt und ihnen die Möglichkeit bietet, Informationen über bedrohte Haie hochzuladen:

~/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" %>

Ein form_tag macht den Daten-Upload möglich, indem eine Post-Aktion auf den endangered_upload_path verweist – die Route, die wir für unsere Uploads definiert haben.  Eine Submit-Schaltfläche, die mit dem submit_tag erstellt wurde, fordert die Benutzer zum "Import Endangered Sharks" (Importieren bedrohter Haie) auf.

Zusätzlich zu diesem Code haben wir einige allgemeine Informationen über ICUN-Codes eingefügt, damit die Benutzer die Daten, die sie sehen werden, interpretieren können.

Wenn die Bearbeitung abgeschlossen wurde, speichern und schließen Sie die Datei.

Öffnen Sie als Nächstes eine Datei für die Ansicht data:

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

Fügen Sie den folgenden Code hinzu, der eine Tabelle mit den Daten der bedrohten Haie hinzufügt:

~/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" %>

Dieser Code enthält noch einmal die ICUN-Statuscodes und eine Bootstrap-Tabelle für die ausgegebenen Daten. Indem wir unsere Variable @endangered durchschleifen, geben wir den Namen und den ICUN-Status jedes Hais in die Tabelle aus.

Unterhalb der Tabelle haben wir einen weiteren Satz von form_tags und submit_tags, die auf den Pfad destroy verweisen, indem Benutzern die Option zum "Delete Endangered Sharks" (Löschen bedrohter Haie) angeboten wird.

Wenn die Bearbeitung abgeschlossen wurde, speichern und schließen Sie die Datei.

Die letzte Änderung, die wir für unsere Ansichten vornehmen, wird in der Ansicht index vorgenommen, die mit unserem Controller home verknüpft ist. Sie erinnern sich vielleicht daran, dass diese Ansicht als das Stammverzeichnis der Anwendung in config/routes.rb festgelegt ist.

Öffnen Sie diese Datei zur Bearbeitung:

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

Finden Sie die Spalte in der Zeile, die besagt Sharks are ancient (Haie sind uralt):

~/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>

Fügen Sie den folgenden Code zur Datei hinzu:

~/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>

Wir haben einen Handlungsaufruf für Benutzer aufgenommen, um mehr über bedrohte Haie zu erfahren, indem wir zuerst eine starke Botschaft weitergeben und dann einen Helfer button_to hinzufügen, der eine GET-Anfrage an die Route endangered index sendet und Benutzern Zugriff auf diesen Teil der Anwendung gewährt. Von dort aus können sie Informationen über bedrohte Haie hochladen und anzeigen.

Wenn die Bearbeitung abgeschlossen wurde, speichern und schließen Sie die Datei.

Nachdem Sie nun Ihren Code eingegeben haben, können Sie die Anwendung starten und einige Haie hochladen!

Schritt 5 – Starten von Sidekiq und Testen der Anwendung

Bevor wir die Anwendung starten, müssen wir Migrationen in unserer Datenbank durchführen und Sidekiq starten, um unsere Worker zu aktivieren. Redis sollte bereits auf dem Server ausgeführt werden, aber wir können das überprüfen, um sicherzugehen. Sobald all diese Dinge eingerichtet sind, sind wir bereit, die Anwendung zu testen.

Überprüfen Sie zunächst, ob Redis ausgeführt wird:

  1. systemctl status redis

Sie sollten eine Ausgabe wie die folgende sehen:

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

Führen Sie als Nächstes Ihre Datenbankmigration durch:

  1. rails db:migrate

Sie können nun Sidekiq im Kontext Ihres aktuellen Projekt-Bundles starten, indem Sie den Befehl bundle exec sidekiq verwenden:

  1. bundle exec sidekiq

Sie werden eine ähnliche Ausgabe wie diese sehen, die anzeigt, dass Sidekiq zur Bearbeitung von Jobs bereit ist:

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

Öffnen Sie ein zweites Terminalfenster, navigieren Sie zum Verzeichnis rails-sidekiq und starten Sie Ihren Anwendungsserver.

Wenn Sie die Anwendung lokal ausführen, verwenden Sie den folgenden Befehl:

  1. bundle exec rails s

Wenn Sie mit einem Entwicklungsserver arbeiten, führen Sie den folgenden Befehl aus:

  1. bundle exec rails s --binding=your_server_ip

Navigieren Sie im Browser zu localhost:3000 oder http://your_server_ip:3000. Sie sehen die folgende Startseite:

Sidekiq App Home

Klicken Sie auf die Which Sharks Are in Danger? Schaltfläche. Da Sie keine gefährdeten Sharks hochgeladen haben, wird Ihnen die Ansicht des gefährdeten Index gezeigt:

Ansicht des gefährdeten Index

Klicken Sie auf Import Endangered Sharks, um die gefährdeten Sharks zu importieren. Eine Statusmeldung teilt Ihnen mit, dass die Sharks importiert wurden:

Import beginnen

Sie sehen auch den Beginn des Imports. Aktualisieren Sie die Seite, um die gesamte Tabelle zu sehen:

Tabelle aktualisieren

Dank Sidekiq ist unser umfangreiches Batch-Upload der gefährdeten Sharks gelungen, ohne den Browser zu blockieren oder die Funktionsweise anderer Anwendungen zu beeinträchtigen.

Klicken Sie auf die Schaltfläche Home unten auf der Seite, die Sie zur Hauptseite der Anwendung zurückbringen wird:

Sidekiq App Home

Klicken Sie hier erneut auf Which Sharks Are in Danger? . Damit gelangen Sie nun direkt zu der Ansicht data, da Sie die Haie bereits hochgeladen haben.

Um die Löschfunktionalität zu testen, klicken Sie auf die Schaltfläche Delete Endangered Sharks unterhalb der Tabelle. Sie sollten nun erneut zu der Hauptseite der Anwendung umgeleitet werden. Wenn Sie ein letztes Mal auf Which Sharks Are in Danger? klicken, gelangen Sie zu der Ansicht index zurück, in der Sie die Option haben, die Haie erneut hochzuladen:

Ansicht des gefährdeten Index

Ihre Anwendung wird nun mit Sidekiq Workers ausgeführt, die zur Bearbeitung von Jobs bereit sind und sicherstellen, dass die Benutzer eine gute Erfahrung mit Ihrer Anwendung haben.

Zusammenfassung

Sie haben nun eine funktionierende Rails-Anwendung mit aktiviertem Sidekiq, die es Ihnen ermöglicht, kostspielige Operationen in eine von Sidekiq verwaltete und von Redis unterstützte Job-Warteschlange auszulagern. Dadurch können Sie die Geschwindigkeit und Funktionalität Ihrer Website im Laufe der Entwicklung verbessern.

Wenn Sie mehr über Sidekiq erfahren möchten, sind die Docs ein guter Ausgangspunkt.

Weitere Informationen über Redis finden Sie in unserer Bibliothek der Redis Ressourcen. Sie können auch mehr über die Ausführung eines verwalteten Redis-Clusters auf DigitalOcean erfahren, indem Sie sich die Produktdokumentation ansehen.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel