18

I'm using a Sidekiq worker to complete some requests to Facebook after a user signs-in for the first time. Typically the task takes around 20 seconds or so.

I'd like to load some information on to the page using an ajax request as soon as the sync is completed, but am unsure as to the best way to check for the job completion with Javascript.

One possibility would be to configure the Sidekiq worker to set a cookie after the rest of the jobs are done. Then I can use a setTimeout function to keep checking for the cookie before calling the load function. But I'm unsure whether this is the best way to be doing this. Could I be using Redis instead?

Paul
  • 2,021
  • 5
  • 22
  • 33
  • In a sidekiq worker you cannot set a cookie, because to deliver a cookie to client you need to send them an HTTP response, and worker is not a server. – RocketR Dec 08 '17 at 14:57

2 Answers2

1

Paul, initially you have to take a look on this PubSub on Rails tutorial!

This will be your better solution for notify user when asynchronous things occur/complete in the backend.

tip: If you're using heroku, you'll have a lot of libraries with abstract this complexity for you.

Neilor Caldeira
  • 374
  • 2
  • 3
1

Paul, I would keep your concerns separated. I am assuming that the sidekiq worker uses some rails activerecord model to send some information to facebook. I would set a flag on that model to true when the facebook requests are completed successfully.

Then you can have a setTimeout on in js to poll for that change in the db... or for faster, more automatic responses you can look into using web sockets. I have used a library called Pusher in the past. It's pretty easy to integrate with rails and makes for a very snappy UI.