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)
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文档的链接.
补充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)最重要的部分在这里:
并为您的工人打开开关,单击铅笔,然后打开丢失的开关。现在一切正常,祝您有美好的一天!
归档时间: |
|
查看次数: |
28294 次 |
最近记录: |