Thứ sáu, 22/11/2019 | 00:00 GMT+7

Cách thêm Sidekiq và Redis vào ứng dụng Ruby on Rails

Khi phát triển một ứng dụng Ruby on Rails , bạn có thể thấy mình có các việc ứng dụng phải được thực hiện không đồng bộ. Xử lý dữ liệu, gửi email hàng loạt hoặc tương tác với các API bên ngoài là tất cả các ví dụ về công việc có thể được thực hiện không đồng bộ với các công việc nền . Sử dụng các công việc nền có thể cải thiện hiệu suất ứng dụng của bạn bằng cách giảm tải các việc có thể tốn nhiều thời gian xuống hàng đợi xử lý nền, giải phóng chu kỳ yêu cầu / phản hồi ban đầu.

Sidekiq là một trong những khung công việc nền được sử dụng rộng rãi hơn mà bạn có thể triển khai trong ứng dụng Rails. Nó được hỗ trợ bởi Redis , một repository giá trị khóa trong bộ nhớ được biết đến với tính linh hoạt và hiệu suất. Sidekiq sử dụng Redis như một cửa hàng quản lý công việc để xử lý hàng nghìn công việc mỗi giây .

Trong hướng dẫn này, bạn sẽ thêm Redis và Sidekiq vào một ứng dụng Rails hiện có. Bạn sẽ tạo một tập hợp các lớp công nhân Sidekiq và các phương thức để xử lý:

  • Tải lên hàng loạt thông tin cá mập có nguy cơ tuyệt chủng lên database ứng dụng từ file CSV trong repository dự án.
  • Việc loại bỏ dữ liệu này.

Khi bạn hoàn tất, bạn sẽ có một ứng dụng demo sử dụng worker và job để xử lý các việc không đồng bộ. Đây sẽ là nền tảng tốt để bạn thêm nhân công và công việc vào ứng dụng của riêng mình, sử dụng hướng dẫn này như một điểm khởi đầu.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Máy local hoặc server phát triển chạy Ubuntu 18.04. Máy phát triển của bạn phải có user không phải root có quyền quản trị và firewall được cấu hình với ufw . Để biết hướng dẫn về cách cài đặt điều này, hãy xem hướng dẫn Cài đặt server ban đầu với Ubuntu 18.04 của ta .
  • Node.jsnpm được cài đặt trên máy local hoặc server phát triển của bạn. Hướng dẫn này sử dụng Node.js version 10.17.0 và version NPM 6.11.3. Để biết hướng dẫn về cách cài đặt Node.js và npm trên Ubuntu 18.04, hãy làm theo hướng dẫn trong phần “Cài đặt bằng PPA” của Cách cài đặt Node.js trên Ubuntu 18.04 .
  • Trình quản lý gói Yarn được cài đặt trên máy local hoặc server phát triển của bạn. Bạn có thể làm theo hướng dẫn cài đặt trong tài liệu chính thức.
  • Ruby, rbenv và Rails được cài đặt trên máy local hoặc server phát triển của bạn, hãy làm theo các Bước 1-4 trong Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04 . Hướng dẫn này sử dụng Ruby 2.5.1 , rbenv 1.1.2 và Rails 5.2.3 .
  • Đã cài đặt SQLite, theo Bước 1 củaCách tạo Ứng dụng Ruby on Rails . Hướng dẫn này sử dụng SQLite 3 3.22.0 .
  • Đã cài đặt Redis, làm theo các Bước 1-3 của Cách cài đặt và bảo mật Redis trên Ubuntu 18.04 . Hướng dẫn này sử dụng Redis 4.0.9 .

Bước 1 - Nhân bản Dự án và Cài đặt Phụ thuộc

Bước đầu tiên của ta sẽ là sao chép repository rails-bootstrap từ tài khoản GitHub của Cộng đồng DigitalOcean . Kho lưu trữ này bao gồm mã từ cài đặt được mô tả trong Cách thêm Bootstrap vào ứng dụng Ruby on Rails , giải thích cách thêm Bootstrap vào dự án Rails 5 hiện có.

Sao rails-sidekiq repository vào một folder có tên rails-sidekiq :

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

Điều hướng đến folder rails-sidekiq :

  • cd rails-sidekiq

Để làm việc với mã, trước tiên bạn cần cài đặt các phụ thuộc của dự án, được liệt kê trong Gemfile của nó. Bạn cũng cần thêm sidekiq gem vào dự án để làm việc với Sidekiq và Redis.

Mở Gemfile của dự án để chỉnh sửa, sử dụng nano hoặc editor bạn quen dùng :

  • nano Gemfile

Thêm đá quý vào bất kỳ đâu trong các phụ thuộc dự án chính (ở trên các phụ thuộc phát triển):

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

Lưu file khi bạn hoàn tất việc thêm đá quý.

Sử dụng lệnh sau để cài đặt các viên ngọc:

  • bundle install

Bạn sẽ thấy trong kết quả rằng redis gem cũng được cài đặt như một yêu cầu cho sidekiq .

Tiếp theo, bạn sẽ cài đặt các phụ thuộc Yarn của bạn . Bởi vì dự án Rails 5 này đã được sửa đổi để phân phối nội dung với webpack, các phụ thuộc JavaScript của nó hiện được quản lý bởi Yarn. Điều này nghĩa là cần phải cài đặt và xác minh các phụ thuộc được liệt kê trong file package.json của dự án.

Chạy yarn install để cài đặt các phụ thuộc sau:

  • yarn install

Tiếp theo, chạy di chuyển database của bạn:

  • rails db:migrate

Khi quá trình di chuyển của bạn hoàn tất, bạn có thể kiểm tra ứng dụng đảm bảo rằng ứng dụng đang hoạt động như mong đợi. Khởi động server của bạn trong bối cảnh gói local của bạn bằng lệnh sau nếu bạn đang làm việc local :

  • bundle exec rails s

Nếu bạn đang làm việc trên một server phát triển, bạn có thể khởi động ứng dụng bằng:

  • bundle exec rails s --binding=your_server_ip

Điều hướng đến localhost:3000 hoặc http:// your_server_ip :3000 . Bạn sẽ thấy trang đích sau:

Trang đích ứng dụng

Để tạo một con cá mập mới, hãy nhấp vào nút Nhận thông tin cá mập , nút này sẽ đưa bạn đến tuyến đường sharks/index :

Tuyến chỉ số cá mập

Để xác minh ứng dụng đang hoạt động, ta có thể thêm một số thông tin demo vào nó. Nhấp vào Cá mập mới . Bạn sẽ được yêu cầu nhập tên user ( sammy ) và password ( cá mập ), nhờ cài đặt xác thực của dự án.

Trên trang Cá mập mới , nhập “Great White” vào trường Tên và “Đáng sợ” vào trường Sự kiện :

Shark Create

Nhấn vào nút Create Shark để tạo cá mập. Khi bạn thấy rằng cá mập của bạn đã được tạo, bạn có thể giết server bằng CTRL+C

Đến đây bạn đã cài đặt các phụ thuộc cần thiết cho dự án của bạn và kiểm tra chức năng của nó. Tiếp theo, bạn có thể thực hiện một số thay đổi đối với ứng dụng Rails để làm việc với các tài nguyên cá mập đang bị đe dọa của bạn.

Bước 2 - Tạo bộ điều khiển cho các nguồn cá mập nguy cấp

Để làm việc với các nguồn tài nguyên cá mập nguy cấp của ta , ta sẽ thêm một mô hình mới vào ứng dụng và một bộ điều khiển sẽ kiểm soát cách thông tin về các loài cá mập nguy cấp được hiển thị cho user . Mục tiêu cuối cùng của ta là giúp user có thể tải lên một lượng lớn thông tin về loài cá mập có nguy cơ tuyệt chủng mà không chặn chức năng tổng thể của ứng dụng của ta và xóa thông tin đó khi họ không cần nữa.

Đầu tiên, hãy tạo một mô hình Endangered cho những con cá mập có nguy cơ tuyệt chủng của ta . Ta sẽ bao gồm một lĩnh vực chuỗi trong bảng database của ta cho tên cá mập, và một lĩnh vực chuỗi cho Liên minh Quốc tế về Bảo tồn Thiên nhiên (IUCN) loại để xác định mức độ mà mỗi cá mập có nguy cơ.

Cuối cùng, cấu trúc mô hình của ta sẽ trùng với các cột trong file CSV mà ta sẽ sử dụng để tạo tải lên hàng loạt. Tệp này nằm trong folder db và bạn có thể kiểm tra nội dung của nó bằng lệnh sau:

  • cat db/sharks.csv

Tệp này chứa danh sách 73 loài cá mập nguy cấp và các trạng thái IUCN của chúng - vu là rủi ro bảo mật , vi nguy cấp và cr là cực kỳ nguy cấp.

Mô hình Endangered của ta sẽ tương quan với dữ liệu này, cho phép ta tạo các version Endangered mới từ file CSV này. Tạo mô hình bằng lệnh sau:

  • rails generate model Endangered name:string iucn:string

Tiếp theo, tạo một bộ điều khiển Endangered với một hành động index :

  • rails generate controller endangered index

Điều này sẽ cung cấp cho ta điểm bắt đầu để xây dựng chức năng của ứng dụng của ta , mặc dù ta cũng cần thêm các phương thức tùy chỉnh vào file điều khiển mà Rails đã tạo cho ta .

Mở file đó ngay bây giờ:

  • nano app/controllers/endangered_controller.rb

Rails đã cung cấp cho ta một bản phác thảo để ta có thể bắt đầu điền vào.

Trước tiên, ta cần xác định những tuyến đường ta yêu cầu để làm việc với dữ liệu của ta . Nhờ lệnh generate controller , ta có một phương thức index để bắt đầu. Điều này sẽ tương quan với chế độ xem index , nơi ta sẽ giới thiệu cho user tùy chọn tải lên những con cá mập có nguy cơ tuyệt chủng.

Tuy nhiên, ta cũng cần giải quyết các trường hợp user có thể đã tải lên các cá mập; họ sẽ không cần tùy chọn tải lên trong trường hợp này. Bằng cách nào đó, ta cần đánh giá xem có bao nhiêu trường hợp của lớp Endangered cấp đã tồn tại, vì nhiều trường hợp cho biết tải lên hàng loạt đã xảy ra.

Hãy bắt đầu bằng cách tạo một phương thức private set_endangered sẽ lấy từng cá thể của lớp Endangered từ database . Thêm mã sau vào file :

~ / rails-sidekiq / app / controllers / secure_controller.rb
class EndangeredController < ApplicationController   before_action :set_endangered, only: [:index, :data]    def index   end    private      def set_endangered       @endangered = Endangered.all      end  end 

Lưu ý bộ lọc before_action sẽ đảm bảo giá trị của @endangered chỉ được đặt cho index và các tuyến data , đây sẽ là nơi ta xử lý dữ liệu cá mập có nguy cơ tuyệt chủng.

Tiếp theo, thêm mã sau vào phương thức index để xác định đường dẫn chính xác cho user truy cập phần này của ứng dụng:

~ / rails-sidekiq / app / controllers / secure_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 . . .  

Nếu có nhiều hơn 0 trường hợp thuộc lớp Endangered của ta , ta sẽ chuyển hướng user đến tuyến data , nơi họ có thể xem thông tin về cá mập mà họ đã tạo. Nếu không, họ sẽ thấy chế độ xem index .

Tiếp theo, bên dưới phương pháp index , hãy thêm một phương thức data , phương thức này sẽ tương quan với chế độ xem data :

~ / rails-sidekiq / app / controllers / secure_controller.rb
. . .    def index               if @endangered.length > 0       redirect_to endangered_data_path     else       render 'index'     end   end    def data    end . . . 

Tiếp theo, ta sẽ thêm một phương thức để tự xử lý việc tải lên dữ liệu. Ta sẽ gọi phương thức này là upload và nó sẽ gọi một lớp công nhân Sidekiq và phương thức để thực hiện tải lên dữ liệu từ file CSV. Ta sẽ tạo định nghĩa cho lớp worker này, AddEndangeredWorker , trong bước tiếp theo.

Bây giờ, hãy thêm mã sau vào file để gọi Sidekiq worker thực hiện tải lên:

~ / rails-sidekiq / app / controllers / secure_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 . . . 

Bằng cách gọi phương thức perform_async trên lớp AddEndangeredWorker , sử dụng file CSV làm đối số, mã này đảm bảo dữ liệu cá mập và công việc tải lên được chuyển tới Redis. Các công nhân của Sidekiq mà ta sẽ cài đặt giám sát hàng đợi công việc và sẽ phản hồi khi phát sinh công việc mới.

Sau khi gọi perform_async , phương thức upload của ta sẽ chuyển hướng đến đường dẫn data , nơi user có thể nhìn thấy những con cá mập được tải lên.

Tiếp theo, ta sẽ thêm một destroy phương pháp để tiêu diệt các dữ liệu. Thêm mã sau vào bên dưới phương pháp upload :

~ / rails-sidekiq / app / controllers / secure_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 . . .  

Giống như phương pháp upload của ta , phương thức destroy của ta bao gồm một perform_async gọi perform_async trên lớp RemoveEndangeredWorker - công nhân Sidekiq khác mà ta sẽ tạo. Sau khi gọi phương thức này, nó sẽ chuyển hướng user đến đường dẫn ứng dụng root .

Tệp đã hoàn thành sẽ giống như sau:

~ / rails-sidekiq / app / controllers / secure_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 

Lưu file khi bạn hoàn tất chỉnh sửa.

Bước cuối cùng trong việc củng cố các tuyến của ứng dụng của ta , ta sẽ sửa đổi mã trong config/routes.rb , file nơi khai báo tuyến của ta .

Mở file đó ngay bây giờ:

  • nano config/routes.rb

Tệp hiện có dạng như sau:

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

Ta cần cập nhật file để bao gồm các tuyến mà ta đã xác định trong bộ điều khiển của bạn : data , uploaddestroy . Tuyến data của ta sẽ trùng với yêu cầu GET để truy xuất dữ liệu cá mập, trong khi các tuyến uploaddestroy của ta sẽ ánh xạ tới các yêu cầu POST tải lên và hủy dữ liệu đó.

Thêm mã sau vào file để xác định các tuyến sau:

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

Lưu file khi bạn hoàn tất chỉnh sửa.

Với mô hình và bộ điều khiển Endangered của bạn, giờ đây bạn có thể chuyển sang xác định các lớp công nhân Sidekiq của bạn .

Bước 3 - Xác định công nhân Sidekiq

Ta đã gọi các phương thức perform_async trên các công nhân Sidekiq trong bộ điều khiển của ta , nhưng ta vẫn cần phải tự tạo các công nhân đó.

Đầu tiên, hãy tạo folder workers cho công nhân:

  • mkdir app/workers

Mở file cho công nhân AddEndangeredWorker :

  • nano app/workers/add_endangered_worker.rb

Trong file này, ta sẽ thêm mã cho phép ta làm việc với dữ liệu trong file CSV của ta . Đầu tiên, thêm mã vào file sẽ tạo lớp, bao gồm thư viện Ruby CSV và đảm bảo lớp này hoạt động như một Sidekiq Worker:

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

Ta cũng bao gồm tùy chọn retry: false đảm bảo rằng Sidekiq không thử tải lên lại trong trường hợp không thành công.

Tiếp theo, thêm mã cho chức năng perform :

~ / rails-sidekiq / app / worker / 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 

Các perform phương pháp nhận đối số từ perform_async phương pháp quy định tại các điều khiển, vì vậy điều quan trọng là các giá trị tham số được liên kết. Ở đây, ta chuyển vào csv_file , biến ta đã xác định trong bộ điều khiển và ta sử dụng phương thức foreach từ thư viện CSV để đọc các giá trị trong file . Đặt headers: true cho vòng lặp này đảm bảo hàng đầu tiên của file được coi là một hàng tiêu đề.

Sau đó, khối đọc các giá trị từ file vào các cột mà ta đặt cho mô hình Endangered của ta : nameiucn . Chạy vòng lặp này sẽ tạo các version Endangered cho mỗi mục nhập trong file CSV của ta .

Khi bạn đã chỉnh sửa xong, hãy lưu file .

Tiếp theo, ta sẽ tạo một worker để xử lý việc xóa dữ liệu này. Mở file cho lớp RemoveEndangeredWorker :

  • nano app/workers/remove_endangered_worker.rb

Thêm mã để định nghĩa lớp và đảm bảo nó sử dụng thư viện CSV và các chức năng như một Sidekiq Worker:

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

Tiếp theo, thêm một phương thức perform để xử lý việc hủy dữ liệu cá mập có nguy cơ tuyệt chủng:

~ / rails-sidekiq / app / worker / remove_endangered_worker.rb
class RemoveEndangeredWorker   include Sidekiq::Worker   sidekiq_options retry: false    def perform     Endangered.destroy_all   end  end 

Phương thức perform gọi destroy_all trên lớp Endangered , nó sẽ xóa tất cả các cá thể của lớp khỏi database .

Lưu file khi bạn hoàn tất chỉnh sửa.

Với nhân viên của bạn tại chỗ, bạn có thể chuyển sang tạo bố cục cho các chế độ xem endangered và các mẫu cho chế độ xem indexdata của bạn, để user có thể tải lên và xem các loài cá mập có nguy cơ tuyệt chủng.

Bước 4 - Thêm bố cục và xem mẫu

Để user có thể thưởng thức thông tin về loài cá mập có nguy cơ tuyệt chủng của họ, ta cần giải quyết hai điều: bố cục cho các chế độ xem được xác định trong bộ điều khiển endangered của ta và các mẫu chế độ xem cho index và chế độ xem data .

Hiện tại, ứng dụng của ta sử dụng bố cục toàn ứng dụng, nằm tại app/views/layouts/application.html.erb , một phần chuyển và bố cục cho chế độ xem sharks . Kiểm tra bố trí ứng dụng cho một khối nội dung, cho phép ta để tải bố trí khác nhau trên cơ sở đó một phần của ứng dụng user của ta được tham gia với: cho home index trang, họ sẽ thấy một bố trí, và cho bất kỳ quan điểm liên quan đến cá mập cá nhân, họ sẽ thấy cái khác.

Ta có thể sử dụng lại bố cục sharks cho các chế độ xem endangered vì định dạng này cũng sẽ hoạt động để trình bày dữ liệu cá mập hàng loạt.

Sao chép file bố cục sharks để tạo bố cục endangered :

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

Tiếp theo, ta sẽ làm việc để tạo các mẫu chế độ xem cho các chế độ xem indexdata của ta .

Mở mẫu index trước:

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

Xóa mã bảng soạn sẵn và thay vào đó thêm mã sau, mã này sẽ cung cấp cho user một số thông tin chung về các danh mục nguy cấp và cung cấp cho họ tùy chọn tải lên thông tin về các loài cá mập có nguy cơ tuyệt chủng:

~ / rails-sidekiq / app / views / secure / 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 giúp cho việc tải lên dữ liệu có thể thực hiện được bằng cách trỏ hành động đăng đến đường dẫn endangered_upload_path form_tag - tuyến đường mà ta đã xác định cho các video tải lên của bạn . Nút gửi, được tạo bằng submit_tag , nhắc user "Import Endangered Sharks" .

Ngoài mã này, ta đã bao gồm một số thông tin chung về mã ICUN để user có thể diễn giải dữ liệu họ sẽ thấy.

Lưu file khi bạn hoàn tất chỉnh sửa.

Tiếp theo, mở một file cho chế độ xem data :

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

Thêm mã sau, mã này sẽ thêm một bảng với dữ liệu về loài cá mập có nguy cơ tuyệt chủng:

~ / rails-sidekiq / app / views / secure / 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" %> 

Mã này bao gồm các mã trạng thái ICUN và một bảng Bootstrap cho dữ liệu kết quả . Bằng cách lặp qua biến @endangered của ta , ta xuất tên và trạng thái ICUN của mỗi con cá mập vào bảng.

Bên dưới bảng, ta có một tập hợp khác của form_tagssubmit_tags , được đăng lên đường destroy bằng cách cung cấp cho user tùy chọn "Delete Endangered Sharks" .

Lưu file khi bạn hoàn tất chỉnh sửa.

Sửa đổi cuối cùng mà ta sẽ thực hiện đối với chế độ xem của bạn sẽ nằm trong chế độ xem index liên kết với bộ điều khiển home của ta . Bạn có thể nhớ lại rằng dạng xem này được đặt làm root của ứng dụng trong config/routes.rb .

Mở file này để chỉnh sửa:

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

Tìm cột trong hàng cho biết 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> 

Thêm mã sau vào file :

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

Ta đã bao gồm một lời kêu gọi hành động để user tìm hiểu thêm về loài cá mập có nguy cơ tuyệt chủng, trước tiên bằng cách chia sẻ một thông điệp mạnh mẽ, sau đó thêm trình trợ giúp button_to gửi yêu cầu GET đến tuyến index endangered của ta , cấp cho user quyền truy cập vào phần đó của ứng dụng . Từ đó, họ sẽ có thể tải lên và xem thông tin về cá mập có nguy cơ tuyệt chủng.

Lưu file khi bạn hoàn tất chỉnh sửa.

Với mã của bạn tại chỗ, bạn đã sẵn sàng khởi động ứng dụng và tải lên một số cá mập!

Bước 5 - Khởi động Sidekiq và kiểm tra ứng dụng

Trước khi khởi động ứng dụng, ta cần chạy di chuyển trên database của bạn và khởi động Sidekiq để kích hoạt nhân viên của ta . Redis hẳn đã chạy trên server , nhưng ta có thể kiểm tra để chắc chắn. Với tất cả những điều này, ta sẽ sẵn sàng kiểm tra ứng dụng.

Trước tiên, hãy kiểm tra xem Redis có đang chạy không:

  • systemctl status redis

Bạn sẽ thấy kết quả như sau:

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

Tiếp theo, chạy di chuyển database của bạn:

  • rails db:migrate

Đến đây bạn có thể khởi động Sidekiq trong bối cảnh gói dự án hiện tại của bạn bằng cách sử dụng lệnh bundle exec sidekiq của bundle exec sidekiq :

  • bundle exec sidekiq

Bạn sẽ thấy kết quả như thế này, cho biết Sidekiq đã sẵn sàng xử lý các công việc:

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

Mở cửa sổ terminal thứ hai, chuyển đến folder rails-sidekiq và khởi động server ứng dụng của bạn.

Nếu bạn đang chạy ứng dụng local , hãy sử dụng lệnh sau:

  • bundle exec rails s

Nếu bạn đang làm việc với một server phát triển, hãy chạy như sau:

  • bundle exec rails s --binding=your_server_ip

Điều hướng đến localhost:3000 hoặc http:// your_server_ip :3000 trong trình duyệt. Bạn sẽ thấy trang đích sau:

Trang chủ ứng dụng Sidekiq

Nhấp vào Cá mập nào đang gặp nguy hiểm? cái nút. Vì bạn chưa tải lên bất kỳ loài cá mập nguy cấp nào nên điều này sẽ đưa bạn đến chế độ xem index endangered :

Chế độ xem index  nguy cấp

Nhấp vào Nhập cá mập nguy cấp để nhập cá mập. Bạn sẽ thấy một thông báo trạng thái cho bạn biết rằng cá mập đã được nhập:

Bắt đầu nhập

Bạn cũng sẽ thấy phần bắt đầu của quá trình nhập. Làm mới trang web để xem toàn bộ bảng:

Làm mới bảng

Nhờ Sidekiq, quá trình tải lên hàng loạt lớn về cá mập có nguy cơ tuyệt chủng của ta đã thành công mà không cần khóa trình duyệt hoặc can thiệp vào chức năng ứng dụng khác.

Nhấp vào nút Trang chủ ở cuối trang, nút này sẽ đưa bạn trở lại trang chính của ứng dụng:

Trang chủ ứng dụng Sidekiq

Từ đây, nhấp vào Cá mập nào đang gặp nguy hiểm? lần nữa. Thao tác này bây giờ sẽ đưa bạn trực tiếp đến chế độ xem data , vì bạn đã tải các cá mập lên.

Để kiểm tra chức năng xóa, hãy nhấp vào nút Xóa cá mập nguy cấp bên dưới bảng. Bạn sẽ được chuyển hướng đến trang chủ ứng dụng . Nhấp vào Cá mập nào đang gặp nguy hiểm? một lần cuối cùng sẽ đưa bạn trở lại chế độ xem index , nơi bạn sẽ có tùy chọn tải lên lại cá mập:

Chế độ xem index  nguy cấp

Ứng dụng của bạn hiện đang chạy với nhân viên Sidekiq tại chỗ, những người này sẵn sàng xử lý công việc và đảm bảo user có trải nghiệm tốt khi làm việc với ứng dụng của bạn.

Kết luận

Đến đây bạn có một ứng dụng Rails đang hoạt động với Sidekiq được kích hoạt, điều này sẽ cho phép bạn tải các hoạt động tốn kém xuống hàng đợi công việc do Sidekiq quản lý và được Redis hỗ trợ. Điều này sẽ cho phép bạn cải thiện tốc độ và chức năng của trang web khi bạn phát triển.

Nếu bạn muốn tìm hiểu thêm về Sidekiq, tài liệu là một nơi tốt để tham khảo .

Để tìm hiểu thêm về Redis, hãy xem thư viện tài nguyên Redis của ta . Bạn cũng có thể tìm hiểu thêm về cách chạy một cụm Redis được quản lý trên DigitalOcean bằng cách xem tài liệu sản phẩm .


Tags:

Các tin liên quan

Cách quản lý các bộ được sắp xếp trong Redis
2019-11-22
Cách hết hạn khóa trong Redis
2019-10-08
Cách quản lý bản sao và khách hàng trong Redis
2019-10-08
Cách thực hiện giao dịch trong Redis
2019-10-01
Cách phân tích thống kê database Redis được quản lý bằng cách sử dụng elastic trên Ubuntu 18.04
2019-09-27
Cách quản lý bộ trong Redis
2019-09-26
Cách quản lý database và khóa Redis
2019-09-20
Cách quản lý danh sách trong Redis
2019-09-20
Cách quản lý hàm băm trong Redis
2019-09-20
Cách khắc phục sự cố trong Redis
2019-09-20