[deploy] Refactor:Move RssReader Fetch Article task to Sidekiq (#9976)

This commit is contained in:
Molly Struve 2020-08-25 13:47:13 -05:00 committed by GitHub
parent 36358293ce
commit ff06454151
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 53 additions and 29 deletions

View file

@ -86,11 +86,11 @@ body {
.site-config__required {
background: #dc3545;
border-radius: 19px;
padding: 5px 15px;
color: white;
text-align: right;
margin-left: 10px;
border-radius: 19px;
padding: 5px 15px;
color: white;
text-align: right;
margin-left: 10px;
}
.site-config__label {

View file

@ -38,7 +38,9 @@ export class SaveButton extends Component {
<button
type="button"
className={`crayons-btn crayons-btn--s ${
isBookmarked ? 'crayons-btn--ghost-dimmed' : 'crayons-btn--secondary'
isBookmarked
? 'crayons-btn--ghost-dimmed'
: 'crayons-btn--secondary'
}`}
data-initial-feed
data-reactable-id={article.id}

View file

@ -32,6 +32,7 @@ class RssReader
def create_articles_for_user(user)
user.update_column(:feed_fetched_at, Time.current)
feed = fetch_rss(user.feed_url.strip)
return [] unless feed.url
articles = []

View file

@ -2,14 +2,13 @@
<article class="crayons-card grid p-6 mb-6 gap-1">
<%= form_for [:admin, ProfileField.new], html: { class: "inline-form" } do |form| %>
<%= render "group_form",
form: form,
select_option_tags: options_for_select(ProfileField.distinct.pluck(:group)),
select_options: {
include_blank: "Choose an existing group",
class: "form-control selectpicker profile__group-dropdown"
},
toggle_text: "or create a new group"
%>
form: form,
select_option_tags: options_for_select(ProfileField.distinct.pluck(:group)),
select_options: {
include_blank: "Choose an existing group",
class: "form-control selectpicker profile__group-dropdown"
},
toggle_text: "or create a new group" %>
<div class="form-group">
<%= render "form", form: form %>
<%= form.submit "Create New Profile Field", class: "btn btn-primary" %>
@ -43,14 +42,13 @@
<div class="form-group grid p-6 mb-6 gap-1">
<%= form_for [:admin, field] do |form| %>
<%= render "group_form",
form: form,
select_option_tags: options_for_select(ProfileField.distinct.pluck(:group), selected: field[:group]),
select_options: {
class: "form-control selectpicker profile__group-dropdown"
},
toggle_text: "or create a new group"
%>
<%= render "form", form: form %>
form: form,
select_option_tags: options_for_select(ProfileField.distinct.pluck(:group), selected: field[:group]),
select_options: {
class: "form-control selectpicker profile__group-dropdown"
},
toggle_text: "or create a new group" %>
<%= render "form", form: form %>
<%= form.submit class: "btn btn-primary" %>
<% end %>
<%= button_to "Delete Profile Field", admin_profile_field_path(field), data: { confirm: "Are you sure?" }, method: :delete, class: "btn btn-secondary" %>

View file

@ -0,0 +1,12 @@
module Articles
class RssReaderWorker
include Sidekiq::Worker
sidekiq_options queue: :medium_priority, retry: 10
def perform
# don't force fetch. Fetch "random" subset instead of all of them.
RssReader.get_all_articles(force: false)
end
end
end

View file

@ -1,3 +1,6 @@
fetch_all_rss:
cron: "20 * * * *" # every hour, 20 min after the hour
class: "Articles::RssReaderWorker"
log_worker_queue_stats:
cron: "*/10 * * * *" # every 10 minutes
class: "Metrics::RecordBackgroundQueueStatsWorker"

View file

@ -1,7 +0,0 @@
desc "This task is called by the Heroku scheduler add-on"
task fetch_all_rss: :environment do
Rails.application.eager_load!
RssReader.get_all_articles(force: false) # don't force fetch. Fetch "random" subset instead of all of them.
end

View file

@ -0,0 +1,15 @@
require "rails_helper"
RSpec.describe Articles::RssReaderWorker, type: :worker do
let(:worker) { subject }
include_examples "#enqueues_on_correct_queue", "medium_priority"
describe "#perform" do
it "updates RssReader articles" do
allow(RssReader).to receive(:get_all_articles)
worker.perform
expect(RssReader).to have_received(:get_all_articles).with(force: false)
end
end
end