Rails: Starting Sidekiq on Heroku

后端 未结 7 1407
心在旅途
心在旅途 2020-12-12 19:00

I\'m having a problem getting Sidekiq up and running on my Heroku deployed Rails app. I have my app working fine in development (and on Heroku without Sidekiq).

I cr

相关标签:
7条回答
  • 2020-12-12 19:41

    Complementing gdurelle answer:

    You do need some config with Heroku for Sidekiq:

    1) Have the Sidekiq and Redis gems installed (in gemfile and bundled), in my case:

    Gemfile

    gem 'redis', '~> 3.1'
    gem 'sidekiq', '~> 2.7', '>= 2.7.1'
    

    2) Add a worker, if you don't have any workers created locally I suggest you create at least one, just in case, use this:

    rails g sidekiq:worker Hard # will create app/workers/hard_worker.rb
    

    should create this:

    app/workers/hard_worker.rb

    class HardWorker
      include Sidekiq::Worker
      def perform(name, count)
        # do something
      end
    end
    

    3) Add the Redis add-on (in my case Heroku Redis):

    heroku addons:create heroku-redis:hobby-dev
    

    4) Add your redis.rb file, in my case:

    config/initializers/redis.rb

    $redis = Redis.new(url: ENV["REDIS_URL"])
    

    5) Add Procfile or config/sidekiq.yml or both, here are mine:

    Procfile

    worker: bundle exec sidekiq -c 1 -q default -q mailers 
    

    which you can create easier by pasting this in your terminal

    echo "worker: bundle exec sidekiq -c 1 -q default -q mailers" > Procfile
    

    config/sidekiq.yml

    :concurrency: 1
    :queues:
      - [mailers, 7]
      - [default, 5]
    

    6) Most important part go here: and turn on the switch for your worker, click on the pencil and then turn on the missing switch. Things should be working fine now, have a great day!

    0 讨论(0)
  • 2020-12-12 19:50

    No you do not need any config with Heroku for Sidekiq, just add the RedisToGo plugin and you're on. Do not forget to attribute at least 1 worker to your app in your Heroku config.

    Here is my default Procfile:

    web: bundle exec thin start -p $PORT
    worker: bundle exec sidekiq -c 5 -v
    
    0 讨论(0)
  • 2020-12-12 19:52

    Starting with sidekiq version 3.0 there is an additional step, run heroku config:set REDIS_PROVIDER=REDISTOGO_URL in the console.

    Here is the process I used for Rails 4:

    In the console:

    heroku addons:create redistogo
    heroku config:set REDIS_PROVIDER=REDISTOGO_URL
    

    In my Procfile I added:

    worker: bundle exec sidekiq
    

    In my gemfile.rb I added:

    gem 'redis'
    

    I added the following file, config/initializers/redis.rb:

    uri = ENV["REDISTOGO_URL"] || "redis://localhost:6379/"
    REDIS = Redis.new(:url => uri)
    

    Here is the link to the sidekiq docs.

    0 讨论(0)
  • 2020-12-12 19:57

    It's worth checking if the sidekiq process is really started with this command:

    heroku ps
    

    If there's no worker, then you might need to run this command:

    heroku ps:scale worker+1
    

    It turns out that there's a bug in the web UI in that some team members were not allowed to increase the number of workers from 0 to 1, even though the UI seemed to show that!

    0 讨论(0)
  • You can of course run sidekiq alongside your current jobs queue.

    Our Procfile currently looks like this:

    web: bundle exec thin start -R config.ru -e $RAILS_ENV -p $PORT
    worker:  bundle exec rake jobs:work
    sidekiq: bundle exec sidekiq -c 5 -v
    
    0 讨论(0)
  • 2020-12-12 20:03

    Sounds like you're almost there. It may be that you just need to set REDISTOGO_URL on the heroku config?

    heroku config 
    

    should show you the redistogo value?

    If you copy that to REDISTOGO_URL then sidekiq should work?

    heroku config:add REDISTOGO_URL=<redistogo value>
    

    Edit: Sidekiq will use any of these currently: https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/redis_connection.rb#L29-L33

    Edit2: Greg is correct in that you don't need to add the config if you're using RedisToGo. But if you're using OpenRedis, or other Redis providers, then you need to add REDISTOGO_URL for Sidekiq

    0 讨论(0)
提交回复
热议问题