如何在 Rails 上的 Ruby 应用程序中添加 Sidekiq 和 Redis

简介

在开发Ruby on rails应用程序)时,您可能会发现您的应用程序任务应该以异步方式执行。处理数据、发送批处理电子邮件或与外部API交互都是可以使用后台作业异步完成的工作的示例。使用后台作业可以将可能耗时的任务分流到后台处理队列,从而释放原始的请求/响应周期,从而提高应用程序的性能。

Sidekiq是一个可以在Rails应用程序中实现的使用更广泛的后台作业框架。它由Redis支持,这是一个以其灵活性和性能而闻名的内存键值存储。Sidekiq使用Redis作为作业管理存储来处理每秒数千个作业

在本教程中,您将向现有的Rails应用程序添加Redis和Sidekiq。您将创建一组Sidekiq Worker类和方法来处理:

  • 将濒危鲨鱼信息从项目库中的CSV文件批量上传到应用数据库。
  • 删除这些数据。

完成后,您将拥有一个演示应用程序,它使用工作者和作业来异步处理任务。这将是一个很好的基础,您可以使用本教程作为出发点,向自己的应用程序添加工人和作业。

前提条件

要学习本教程,您需要:

  • 运行Ubuntu 18.04的本地机器或开发服务器。您的开发机器应该有一个拥有管理权限的非超级用户,并且防火墙配置了ufw。有关如何设置的说明,请参阅我们的使用Ubuntu 18.04的初始服务器设置》教程。
  • 本地机器或开发服务器上安装了node.jsnpm)。本教程使用Node.js版本10.17.0和NPM版本6.11.3。有关在Ubuntu18.04上安装node.js和npm的指导,请按照How to Install Node.js on Ubuntu 18.04.》(如何在Ubuntu上安装Node.js)的 使用PPA安装** 部分中的说明进行操作
  • 本地机器或开发服务器上安装的纱线包管理器。您可以按照官方文档中的安装instructions进行操作。
  • ruby,rbenv,和rails安装在本地机器或开发服务器上,遵循如何在Ubuntu 18.04.上使用rbenv安装Ruby on rails》中的 步骤1-4** 本教程使用Ruby 2.5.1、rbenv 1.1.2和rails 5.2.3。
  • 安装了SQLite,遵循如何构建Ruby on rails Application.]的 步骤1** 本教程使用SQLite 3 3.22.0。
  • Redis安装,按照如何在Ubuntu 18.04.上安装和保护Redis]中的 步骤1-3** 操作本教程使用的是Redis 4.0.9。

第一步-克隆项目并安装依赖项

我们的第一步是从DigitalOcean社区GitHub帐户克隆rails-bootstrap.存储库该资源库包含How to Add Bootstrap to a Ruby on rails Application,]中描述的设置代码,其中解释了如何将Bootstrap)添加到现有的rails 5项目中。

将仓库克隆到名为rails-side kiq的目录下:

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

导航到rails-side kiq目录:

1cd rails-sidekiq

为了使用代码,您首先需要安装项目的依赖项,这些依赖项列在其Gemfile中。您还需要将Sidekiq gem)添加到项目中以使用Sidekiq和Redis。

使用Nan或您喜欢的编辑器打开项目的Gemfile进行编辑:

1nano Gemfile

在主项目依赖项(开发依赖项以上)中的任意位置添加gem:

1[label ~/rails-sidekiq/Gemfile]
2. . . 
3# Reduces boot times through caching; required in config/boot.rb
4gem 'bootsnap', '>= 1.1.0', require: false
5gem 'sidekiq', '~>6.0.0'
6
7group :development, :test do
8. . .

添加完宝石后,保存并关闭该文件。

使用以下命令安装gem:

1bundle install

您将在输出中看到redisgem也作为side kiq的必备项安装。

接下来,您将安装您的Yarn依赖项。因为这个rails 5项目已经被修改为与webpack一起服务资产,所以它的JavaScript依赖项现在由Yarn管理。这意味着需要安装并验证工程的Package.json文件中列出的依赖项。

运行yansen install安装这些依赖项:

1yarn install

接下来,运行您的数据库迁移:

1rails db:migrate

迁移完成后,您可以测试应用程序以确保其按预期工作。如果您在本地工作,请使用以下命令在本地捆绑包的上下文中启动服务器:

1bundle exec rails s

如果您使用的是开发服务器,则可以使用以下命令启动应用程序:

1bundle exec rails s --binding=your_server_ip

导航到本地主机:3000http://your_server_ip:3000.您将看到以下登录页面:

Application登陆Page

要创建新鲨鱼,请点击获取鲨鱼信息 按钮,进入Sharks/index路径:

![Sharks Index路径](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/ods/rails-idekiq/Shark_index_side kiq.png)

要验证应用程序是否正常工作,我们可以向其添加一些演示信息。点击新鲨鱼 。由于该项目的身份验证settings.],系统将提示您输入用户名(** sammy** )和密码(** Shark**

新鲨鱼 页面中,在** 姓名** 栏中输入Great White,在** 事实** 栏中输入scary

Shark Create

点击创建鲨鱼 按钮来创建鲨鱼。当您看到您的Shark创建完成后,您可以使用CTRL+C杀死服务器。

您现在已经为项目安装了必要的依赖项并测试了其功能。接下来,您可以对Rails应用程序进行一些更改,以处理濒危鲨鱼资源。

第二步-为濒危鲨鱼资源生成控制器

为了使用我们的濒危鲨鱼资源,我们将向应用程序添加一个新的模型和一个控制器,该控制器将控制如何将有关濒危鲨鱼的信息呈现给用户。我们的最终目标是让用户能够上传大量关于濒危鲨鱼的信息,而不会阻止我们应用程序的整体功能,并在他们不再需要这些信息时将其删除。

首先,让我们为濒临灭绝的鲨鱼建立一个)categories)的另一个字符串字段,以确定每条鲨鱼面临的风险程度。

最终,我们的模型结构将与我们将用于创建批量上传的CSV文件中的列相匹配。该文件位于db目录下,您可以使用以下命令查看其内容:

1cat db/sharks.csv

该文件包含了73种濒危鲨鱼及其IUCN状态的清单--vu 为易危鲨鱼,** en** 为濒危鲨鱼,** cr** 为极度濒危鲨鱼。

我们的Enangered模型将与该数据相关联,从而允许我们从该CSV文件创建新的Endangered实例。使用以下命令创建模型:

1rails generate model Endangered name:string iucn:string

接下来,通过index操作生成一个Enangered控制器:

1rails generate controller endangered index

这将为我们构建应用程序的功能提供一个起点,尽管我们还需要向Rails为我们生成的控制器文件添加自定义方法。

立即打开该文件:

1nano app/controllers/endangered_controller.rb

Rails为我们提供了一个框架,我们可以开始填充它。

首先,我们需要确定使用数据所需的路径。多亏了生成控制器命令,我们一开始就有了index方法。这将与index视图相关联,在该视图中,我们将为用户提供上传濒危鲨鱼的选项。

但是,我们也希望处理用户可能已经上传鲨鱼的情况;在这种情况下,他们不需要上传选项。我们需要以某种方式评估已经存在多少个Enangered类的实例,因为不止一个实例指示已经进行了批量上传。

让我们从创建一个set_dangered``Private方法开始,该方法将从数据库获取我们的Enangered类的每个实例。将以下代码添加到文件中:

 1[label ~/rails-sidekiq/app/controllers/endangered_controller.rb]
 2class EndangeredController < ApplicationController
 3  before_action :set_endangered, only: [:index, :data]
 4
 5  def index
 6  end
 7
 8  private
 9
10    def set_endangered
11      @endangered = Endangered.all 
12    end
13
14end

请注意,BEFORE_ACTION过滤器将确保仅为indexdata路由设置@dangered的值,这将是我们处理濒危鲨鱼数据的地方。

接下来,将以下代码添加到index方法中,以确定用户访问应用程序这一部分的正确路径:

 1[label ~/rails-sidekiq/app/controllers/endangered_controller.rb]
 2class EndangeredController < ApplicationController
 3  before_action :set_endangered, only: [:index, :data]
 4
 5  def index          
 6    if @endangered.length > 0
 7      redirect_to endangered_data_path
 8    else
 9      render 'index'
10    end
11  end
12. . .

如果我们的Enangered类的实例超过0个,我们会将用户重定向到data路径,在那里他们可以查看自己创建的鲨鱼的信息。否则,他们将看到index视图。

接下来,在index方法下面添加一个data方法,该方法将关联到一个data视图:

 1[label ~/rails-sidekiq/app/controllers/endangered_controller.rb]
 2. . . 
 3  def index          
 4    if @endangered.length > 0
 5      redirect_to endangered_data_path
 6    else
 7      render 'index'
 8    end
 9  end
10
11  def data 
12  end
13. . .

接下来,我们将添加一个方法来处理数据上传本身。我们将此方法命名为pload,它将调用一个Sidekiq Worker类和方法来从CSV文件上传数据。在下一步中,我们将为这个Worker类AddEnangeredWorker创建定义。

现在,将以下代码添加到文件中以调用Sidekiq worker来执行上传:

 1[label ~/rails-sidekiq/app/controllers/endangered_controller.rb]
 2. . . 
 3  def data 
 4  end
 5
 6  def upload
 7    csv_file = File.join Rails.root, 'db', 'sharks.csv'   
 8    AddEndangeredWorker.perform_async(csv_file)
 9    redirect_to endangered_data_path, notice: 'Endangered sharks have been uploaded!'
10  end
11. . .

通过调用AddEnangeredWorker类的Performance_async方法,并使用CSV文件作为参数,该代码确保Shark数据和上传作业传递给Redis。我们将设置的Sidekiq工作器监视作业队列,并在出现新作业时做出响应。

在调用Performance_async后,我们的upad方法重定向到data路径,用户可以在这里看到上传的Shark。

接下来,我们将添加一个delesty方法来销毁数据。在pload方法下面添加以下代码:

 1[label ~/rails-sidekiq/app/controllers/endangered_controller.rb]
 2. . . 
 3  def upload
 4    csv_file = File.join Rails.root, 'db', 'sharks.csv'   
 5    AddEndangeredWorker.perform_async(csv_file)
 6    redirect_to endangered_data_path, notice: 'Endangered sharks have been uploaded!'
 7  end
 8
 9  def destroy
10    RemoveEndangeredWorker.perform_async
11    redirect_to root_path
12  end
13. . .

与我们的pload方法一样,我们的delesty方法包括对RemoveEnangeredWorker类的Performance_async调用--这是我们将创建的另一个Sidekiq工作线程。调用此方法后,它将用户重定向到根应用程序路径。

完成的文件将如下所示:

 1[label ~/rails-sidekiq/app/controllers/endangered_controller.rb]
 2class EndangeredController < ApplicationController
 3  before_action :set_endangered, only: [:index, :data]
 4
 5  def index          
 6    if @endangered.length > 0
 7      redirect_to endangered_data_path
 8    else
 9      render 'index'
10    end
11  end
12
13  def data 
14  end
15
16  def upload
17    csv_file = File.join Rails.root, 'db', 'sharks.csv'   
18    AddEndangeredWorker.perform_async(csv_file)
19    redirect_to endangered_data_path, notice: 'Endangered sharks have been uploaded!'
20  end
21
22  def destroy
23    RemoveEndangeredWorker.perform_async
24    redirect_to root_path
25  end
26
27  private
28
29    def set_endangered
30      @endangered = Endangered.all 
31    end 
32
33end

编辑完成后,保存并关闭文件。

作为巩固应用程序路由的最后一步,我们将修改config/routes.rb中的代码,这是我们的路由声明所在的文件。

现在打开这个文件:

1nano config/routes.rb

该文件目前看起来如下所示:

 1[label ~/rails-sidekiq/config/routes.rb]
 2Rails.application.routes.draw do
 3  get 'endangered/index'
 4  get 'home/index'
 5  resources :sharks do
 6          resources :posts
 7  end
 8  root 'home#index'
 9  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
10end

我们需要更新该文件,以包含我们在控制器中定义的路由:dataploaddelesty。我们的data路由将与检索Shark数据的GET请求相匹配,而我们的`上传‘和’销毁‘路由将映射到上传和销毁该数据的POST请求。

将以下代码添加到文件中以定义这些路由:

 1[label ~/rails-sidekiq/config/routes.rb]
 2Rails.application.routes.draw do
 3  get 'endangered/index'
 4  get 'endangered/data', to: 'endangered#data'
 5  post 'endangered/upload', to: 'endangered#upload'
 6  post 'endangered/destroy', to: 'endangered#destroy'
 7  get 'home/index'
 8  resources :sharks do
 9          resources :posts
10  end
11  root 'home#index'
12  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
13end

编辑完成后,保存并关闭文件。

有了Endangered模型和控制器,你现在可以继续定义你的Sidekiq worker类了。

第三步-定义Sidekiq工人

我们已经在控制器中对Sidekiq工作器调用了Performance_Async方法,但我们仍然需要自己创建工作器。

首先,为worker创建一个worker目录:

1mkdir app/workers

打开AddEnangeredWorker工人的文件:

1nano app/workers/add_endangered_worker.rb

在该文件中,我们将添加允许我们使用CSV文件中的数据的代码。首先,将代码添加到将创建类的文件中,包括Ruby CSV library,,并确保此类作为Sidekiq工人运行:

1[label ~/rails-sidekiq/app/workers/add_endangered_worker.rb]
2class AddEndangeredWorker
3  require 'csv'
4  include Sidekiq::Worker
5  sidekiq_options retry: false
6
7end

我们还加入了retry:False选项,以确保Sidekiq在失败的情况下不会重试上传。

接下来,添加Perform函数的代码:

 1[label ~/rails-sidekiq/app/workers/add_endangered_worker.rb]
 2class AddEndangeredWorker
 3  require 'csv'
 4  include Sidekiq::Worker
 5  sidekiq_options retry: false
 6
 7  def perform(csv_file)
 8    CSV.foreach(csv_file, headers: true) do |shark|
 9    Endangered.create(name: shark[0], iucn: shark[1])
10  end
11 end
12
13end

Performance‘方法从控制器中定义的Performance_async方法接收参数,因此参数值对齐很重要。这里,我们传入了在控制器中定义的变量csv_file,并使用CSV库中的Foreach方法读取文件中的值。为该循环设置Headers:true`可确保文件的第一行被视为一行Header。

然后,该块将文件中的值读入我们为Enangered模型设置的列:nameiucn。运行此循环将为CSV文件中的每个条目创建Enangered实例。

完成编辑后,保存并关闭该文件。

接下来,我们将创建一个Worker来处理此数据的删除。打开RemoveEnangeredWorker类的文件:

1nano app/workers/remove_endangered_worker.rb

添加代码以定义类,并确保它使用CSV库并充当Sidekiq工作程序:

1[label ~/rails-sidekiq/app/workers/remove_endangered_worker.rb]
2class RemoveEndangeredWorker
3  include Sidekiq::Worker
4  sidekiq_options retry: false
5
6end

接下来,添加一个Performance方法来处理濒危鲨鱼数据的销毁:

 1[label ~/rails-sidekiq/app/workers/remove_endangered_worker.rb]
 2class RemoveEndangeredWorker
 3  include Sidekiq::Worker
 4  sidekiq_options retry: false
 5
 6  def perform
 7    Endangered.destroy_all
 8  end
 9
10end

perform方法对Endangered类调用destroy_all,这将从数据库中删除该类的所有实例。

编辑完成后,保存并关闭文件。

在您的工作人员就位后,您可以继续为您的濒危视图创建布局,并为您的index和`data‘视图创建模板,以便用户可以上传和查看濒危鲨鱼。

第四步-添加布局和视图模板

为了让用户享受他们的濒危鲨鱼信息,我们需要解决两件事:在我们的Endenered控制器中定义的视图的布局,以及indexdata视图的视图模板。

目前,我们的应用程序使用了一个应用程序范围的布局,位于app/view/layout/Applation.html.erb,一个导航部分,以及一个用于Sharks视图的布局。应用程序布局检查内容块,这允许我们根据用户正在使用的应用程序部分加载不同的布局:对于home‘index`页面,他们将看到一种布局,而对于与单个鲨鱼相关的任何视图,他们将看到另一种布局。

我们可以为我们的濒危视图重新调整Sharks布局的用途,因为这种格式也适用于批量显示Shark数据。

Sharks布局文件复制过来,创建一个dangered布局:

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

接下来,我们将为indexdata视图创建视图模板。

首先打开index模板:

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

删除样板代码,添加以下代码,这将为用户提供一些有关濒危类别的一般信息,并为他们提供上传有关濒危鲨鱼的信息的选项:

 1[label ~/rails-sidekiq/app/views/endangered/index.html.erb]
 2<p id="notice"><%= notice %></p>
 3
 4<h1>Endangered Sharks</h1>
 5
 6<p>International Union for Conservation of Nature (ICUN) statuses: <b>vu:</b> Vulnerable, <b>en:</b> Endangered, <b>cr:</b> Critically Endangered </p>
 7
 8<br>
 9
10  <%= form_tag endangered_upload_path do %>
11  <%= submit_tag "Import Endangered Sharks" %>
12  <% end %>
13
14  <br>
15
16<%= 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通过将POST操作指向我们为上传定义的路径dangered_pload_path,从而使数据上传成为可能。通过Submit_tag创建的提交按钮会提示用户导入濒危鲨鱼

除了这些代码,我们还包含了一些关于ICUN代码的一般信息,以便用户可以解释他们将看到的数据。

编辑完成后,保存并关闭文件。

接下来,打开data视图的文件:

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

添加以下代码,该代码将添加一个包含濒危鲨鱼数据的表:

 1[label ~/rails-sidekiq/app/views/endangered/data.html.erb]
 2<p id="notice"><%= notice %></p>
 3
 4<h1>Endangered Sharks</h1>
 5
 6<p>International Union for Conservation of Nature (ICUN) statuses: <b>vu:</b> Vulnerable, <b>en:</b> Endangered, <b>cr:</b> Critically Endangered </p>
 7
 8<div class="table-responsive">
 9<table class="table table-striped table-dark">
10  <thead>
11    <tr>
12      <th>Name</th>
13      <th>IUCN Status</th>
14      <th colspan="3"></th>
15    </tr>
16  </thead>
17
18  <tbody>
19    <% @endangered.each do |shark| %>
20      <tr>
21        <td><%= shark.name %></td>
22        <td><%= shark.iucn %></td>
23      </tr>
24    <% end %>
25  </tbody>
26</table>
27</div>
28
29<br>
30
31  <%= form_tag endangered_destroy_path do %>
32  <%= submit_tag "Delete Endangered Sharks" %>
33  <% end %>
34
35  <br>
36
37<%= 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状态代码,以及用于输出数据的自举表。通过循环我们的@dangered变量,我们将每条鲨鱼的名称和ICUN状态输出到表中。

在该表的下方,我们有另一组form_tagmit_tag,它们通过向用户提供删除濒危鲨鱼的选项来发布到delesty路径。

编辑完成后,保存并关闭文件。

我们将对视图进行的最后一次修改是在与home‘控制器关联的index视图中。您可能还记得,该视图被设置为config/routes.rb`中应用程序的根目录。

打开此文件进行编辑:

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

Sharks are ancient这一行中找到列:

1[label ~/rails-sidekiq/app/views/home/index.html.erb]
2. . . 
3        <div class="col-lg-6">
4            <h3>Sharks are ancient</h3>
5            <p>There is evidence to suggest that sharks lived up to 400 million years ago.
6            </p>
7        </div>
8    </div>
9</div>

将以下代码添加到文件中:

 1[label ~/rails-sidekiq/app/views/home/index.html.erb]
 2. . . 
 3        <div class="col-lg-6">
 4            <h3>Sharks are ancient and SOME are in danger</h3>
 5            <p>There is evidence to suggest that sharks lived up to 400 million years ago. Without our help, some could disappear soon.</p>
 6            <p><%= button_to 'Which Sharks Are in Danger?', endangered_index_path, :method => :get,  :class => "btn btn-primary btn-sm"%>
 7            </p>
 8        </div>
 9    </div>
10</div>

我们加入了一个行动号召,呼吁用户更多地了解濒临灭绝的鲨鱼,首先分享一条强有力的消息,然后添加一个Button_To‘帮助器,该帮助器将GET请求提交到我们的dangeredindex路线,允许用户访问应用程序的这一部分。从那里,他们将能够上传和查看濒危鲨鱼的信息。

编辑完成后,保存并关闭文件。

代码准备就绪后,您就可以启动应用程序并上传一些鲨鱼了!

Step 5 -启动Sidekiq并测试应用

在启动应用程序之前,我们需要在数据库上运行迁移并启动Sidekiq以支持我们的工作人员。Redis应该已经在服务器上运行,但我们可以检查以确定。所有这些都准备就绪后,我们将准备测试应用程序。

首先,检查Redis是否正在运行:

1systemctl status redis

您应该会看到如下所示的输出:

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

接下来,运行您的数据库迁移:

1rails db:migrate

现在,您可以在当前项目包的上下文中使用Bundle exec side kiq命令启动Sidekiq:

1bundle exec sidekiq

您将看到如下输出,表明Sidekiq已准备好处理作业:

 1[secondary_label Output]
 2
 3               m,
 4               `$b
 5          .ss,  $$:         .,d$
 6          `$$P,d$P'    .,md$P"'
 7           ,$$$$$b/md$$$P^'
 8         .d$$$$$$/$$$P'
 9         $$^' `"/$$$'       ____ _ _ _ _
10         $:     ,$$:       / ___|(_) __| | ___| | _(_) __ _
11         `b     :$$        \___ \| |/ _` |/ _ \ |/ / |/ _` |
12                $$:         ___) | | (_| |  __/   <| | (_| |
13                $$         |____/|_|\__,_|\___|_|\_\_|\__, |
14              .d$$                                       |_|
15
162019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: Running in ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
172019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: See LICENSE and the LGPL-3.0 for licensing details.
182019-11-19T21:43:00.540Z pid=17621 tid=gpiqiesdl INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
192019-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}
202019-11-19T21:43:00.543Z pid=17621 tid=gpiqiesdl INFO: Starting processing, hit Ctrl-C to stop

打开第二个终端窗口,导航到rails-sidekiq目录,并启动应用程序服务器。

如果您在本地运行应用程序,请使用以下命令:

1[environment second]
2bundle exec rails s

如果您使用的是开发服务器,请运行以下命令:

1[environment second]
2bundle exec rails s --binding=your_server_ip

在浏览器中导航到本地主机:3000http://your_server_ip:3000。您将看到以下登录页面:

![Sidekiq APP主页](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/ods/rails-idekiq/side kiq_home.png)

点击哪些鲨鱼处于危险之中? 按钮。由于您尚未上传任何濒危鲨鱼,这将带您进入濒危``索引视图:

濒危指数视图

点击 导入濒危鲨鱼 导入鲨鱼。您将看到一条状态消息,告诉您已导入鲨鱼:

Begin IMPORT

您还将看到导入的开始。刷新页面以查看整个表格:

刷新Table

多亏了Sidekiq,我们成功地大批量上传了濒危鲨鱼,而没有锁定浏览器或干扰其他应用程序功能。

点击页面底部的 Home 按钮,返回应用程序主页面:

![Sidekiq APP主页](https://cdn.jsdelivr.net/gh/andsky/tutorials-images/ods/rails-idekiq/side kiq_home.png)

从这里,再次点击哪些鲨鱼处于危险之中? 。这将把你直接带到`data‘视图,因为你已经上传了鲨鱼。

要测试删除功能,请单击表格下方的 删除濒危鲨鱼 按钮。您将再次被重定向到主页应用程序页面。* 哪些鲨鱼处于危险之中?* 最后一次将带你回到index视图,在那里你可以选择再次上传鲨鱼:

濒危指数视图

您的应用程序现在正在运行,Sidekiq worker已经准备好处理作业,并确保用户在使用您的应用程序时有良好的体验。

结论

现在,您有了一个启用了Sidekiq的工作Rails应用程序,它将允许您将昂贵的操作分流到由Sidekiq管理、由Redis支持的作业队列。这将允许您在开发过程中提高站点的速度和功能。

如果你想了解更多关于Sidekiq的信息,docs是一个很好的起点。

要了解有关Redis的更多信息,请查看我们的库redis resources.您还可以通过查看产品documentation.]了解有关在DigitalOcean上运行托管Redis集群的更多信息

Published At
Categories with 技术
comments powered by Disqus