from rails 5.0 up to 6.0
Add this line to your application's Gemfile:
gem 'sk_progress_bar'
And then execute:
$ bundle
Or install it yourself as:
$ gem install sk_progress_bar
(ActiveRecord only) Create migration for Sidekiq Progress Bar and migrate the database (in your Rails project):
rails g sk_progress_bar:migration
rake db:migrate
rails g sk_progress_bar:models
rails g sk_progress_bar:channel
mount ActionCable.server, at: '/cable'
gem 'sidekiq'
# "Sidekiq" need if you will use progress bar in "sidekiq"
gem 'bootstrap', '~> 4.3.1'
# "Boostrap" need if you will use progress bar from "bootstrap"
require 'sk_progress_bar'
index = 0
objects = 10
progress = SkProgressBar.progress_status(index, objects)
# progress => {:percentage=>10, :message=>"Almost done"}
# Calculate and return how many percent of the work done on the total amount of work
SkProgressBar.update_progress_bar(10, Almost done, 46b26c4df9a6c0e2603552bf)
# Update Html Progress Bar
SkProgressBar.create_update_db(progress[:percentage], progress[:message], jid)
# Create/Update Record in DB
<progress id="sk_progress_bar" value="2" max="100"></progress>
<div class="progress">
<div class="progress-bar progress-bar-striped" id="sk_progress_bar" role="progressbar" style="width: 2%" aria-valuenow="10" aria-valuemin="2" aria-valuemax="100"></div>
</div>
.progress
.progress-bar.progress-bar-striped{"aria-valuemax" => "100", "aria-valuemin" => "2", "aria-valuenow" => "10", :role => "progressbar", :style => "width: 2%"}
SkProgressBar.update_progress_bar('99', 'test message', 'sidekiq jid')
All changes about javascript, coffee script, you can implement in this file!
"app/assets/javascripts/channels/sk_progress_bar.coffee"
All data in HTML page updating from this coffee file, please check this file if you want to add new js functionality!
/app/workers/progress_bar_worker.rb
class ProgressBarWorker
include Sidekiq::Worker
require 'sk_progress_bar'
def perform
objects = [*1..10]
# objects => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
start_cycle(objects)
end
def start_cycle(objects)
objects.each_with_index do |object, index|
sleep(0.5)
progress = SkProgressBar.progress_status(index, objects.count)
# progress => {:percentage=>10, :message=>"Almost done"}
# jid => Sidekiq Process ID (46b26c4df9a6c0e2603552bf)
SkProgressBar.update_progress_bar(progress[:percentage], progress[:message], jid)
# Update Html Progress Bar
SkProgressBar.create_update_db(progress[:percentage], progress[:message], jid)
# Create/Update Record in DB
end
end
end
ProgressBarWorker.perform_async
or
ProgressBarWorker.new.perform
# Important (Only for ".new.perform")
When you are using the method ".new.perform" in SidekiqWorker and you need to use
"SkProgressBar.create_update_db" method to save results in DB, please add a unique
"jid" variable in order to avoid duplicated records in the DB.
"Example: SkProgressBar.create_update_db(progress[:percentage], progress[:message], jid)"
If you Action Cable doesn't work.
A possible solution for your problem will be to change the settings in 'config/cable.yml' to these
redis: &redis
adapter: redis
url: redis:https://localhost:6379/1
production: *redis
development: *redis
test: *redis
and add gem 'redis' to Gemfile
After checking out the repo, run bin/setup
to install dependencies. Then, run rake spec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install
. To release a new version, update the version number in version.rb
, and then run bundle exec rake release
, which will create a git tag for the version, push git commits and tags, and push the .gem
file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/Kondzolko/sk_progress_bar. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
The gem is available as open source under the terms of the MIT License.
Everyone interacting in the SkProgressBar project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
Andriy Kondzolko