Rails:在Heroku上启动Sidekiq

Gre*_*ers 39 ruby-on-rails heroku sidekiq

我在使用Heroku部署的Rails应用程序启动并运行Sidekiq时遇到问题.我的应用程序在开发中运行良好(在没有Sidekiq的Heroku上).

我创建了一个Procfile:

worker: bundle exec sidekiq
Run Code Online (Sandbox Code Playgroud)

如果我跑heroku ps,我看到的唯一过程是web.1.

我应该为Sidekiq看一个吗?

我收到一个错误:

Redis::CannotConnectError (Error connecting to Redis on localhost:6379) 在我的Heroku日志中.

更新:发现我可能需要heroku addons:add redistogo.还是行不通.我觉得我缺少一些基本的配置.

我需要做些什么才能让Redis启动并运行我的Heroku应用程序?

我一直在使用Redis/Sidekiq大约一天,所以这对我来说是新的.

谢谢!

格雷格

gdu*_*lle 53

不,你不需要Herki for Sidekiq的任何配置,只需添加RedisToGo插件即可开启.不要忘记在Heroku配置中将至少1名工作人员归因于您的应用.

这是我的默认Procfile:

web: bundle exec thin start -p $PORT
worker: bundle exec sidekiq -c 5 -v
Run Code Online (Sandbox Code Playgroud)

  • c:并发,v:详细,p:端口.你应该阅读文档.真. (12认同)
  • @gdurelle实际文档未在deploy部分中显示此内容.一般来说,文档是非常细分的,很容易错过信息. (7认同)
  • 你能解释一下-c 5 -v选项吗? (2认同)

jus*_*don 36

值得检查sidekiq进程是否真的使用此命令启动:

heroku ps
Run Code Online (Sandbox Code Playgroud)

如果没有worker,那么您可能需要运行此命令:

heroku ps:scale worker+1
Run Code Online (Sandbox Code Playgroud)

事实证明,Web UI中存在一个错误,即一些团队成员不允许将工作人员数量从0增加到1,即使UI似乎显示了这一点!


Ste*_*eve 16

从sidekiq 3.0版开始,还有一个额外的步骤,heroku config:set REDIS_PROVIDER=REDISTOGO_URL在控制台中运行.

这是我用于Rails 4的过程:

在控制台中:

heroku addons:create redistogo
heroku config:set REDIS_PROVIDER=REDISTOGO_URL
Run Code Online (Sandbox Code Playgroud)

我在我的Procfile补充说:

worker: bundle exec sidekiq
Run Code Online (Sandbox Code Playgroud)

我在我的gemfile.rb补充说:

gem 'redis'
Run Code Online (Sandbox Code Playgroud)

我添加了以下文件config/initializers/redis.rb:

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

这是sidekiq文档的链接.


Jos*_*aez 7

补充gdurelle答案:

你确实需要一些 Heroku 的 Sidekiq 配置:

1)安装 Sidekiq 和 Redis gems(在 gemfile 中并捆绑),在我的情况下:

文件

gem 'redis', '~> 3.1'
gem 'sidekiq', '~> 2.7', '>= 2.7.1'
Run Code Online (Sandbox Code Playgroud)

2)添加一个worker,如果你没有在本地创建任何worker,我建议你至少创建一个,以防万一,使用这个:

rails g sidekiq:worker Hard # will create app/workers/hard_worker.rb
Run Code Online (Sandbox Code Playgroud)

应该创建这个:

应用程序/工人/hard_worker.rb

class HardWorker
  include Sidekiq::Worker
  def perform(name, count)
    # do something
  end
end
Run Code Online (Sandbox Code Playgroud)

3)添加Redis插件(在我的例子中是Heroku Redis):

heroku addons:create heroku-redis:hobby-dev
Run Code Online (Sandbox Code Playgroud)

4)添加你的 redis.rb 文件,在我的例子中:

配置/初始化程序/redis.rb

$redis = Redis.new(url: ENV["REDIS_URL"])
Run Code Online (Sandbox Code Playgroud)

5) 添加 Procfile 或 config/sidekiq.yml 或两者,这里是我的:

配置文件

worker: bundle exec sidekiq -c 1 -q default -q mailers 
Run Code Online (Sandbox Code Playgroud)

通过将其粘贴到终端中,您可以更轻松地创建

echo "worker: bundle exec sidekiq -c 1 -q default -q mailers" > Procfile
Run Code Online (Sandbox Code Playgroud)

配置/sidekiq.yml

:concurrency: 1
:queues:
  - [mailers, 7]
  - [default, 5]
Run Code Online (Sandbox Code Playgroud)

6)最重要的部分在这里 并为您的工人打开开关,单击铅笔,然后打开丢失的开关。现在一切正常,祝您有美好的一天!

  • 我很高兴它有帮助,祝你有美好的一天! (2认同)