如何设置 Haystack 的 QueuedSignalProcessor 以使用 Redis?
How do I set up Haystack's QueuedSignalProcessor to use Redis?
我有一个项目,我想从使用 Haystack 的 queued_search 库迁移过来,使用 Redis 作为队列后端。在此之前,Haystack 和 Django 一切正常,我只是在更换信号处理器时遇到了问题。
我的理解是这实际上需要几层代码:
- Redis :: 这是数据存储
- RQ :: 这是使用 Redis
的队列 (https://code.google.com/p/queues/) 的实现
- django-rq :: 这是 RQ 的 Django 包装器,我可以在其中指定连接设置
- queued_search :: 这是 Haystack 信号处理库。这会寻找一个通用的 QUEUE_BACKEND,它被设置为 'rq'.
1) 我已经在本地安装了Redis。看起来 运行 游刃有余:
> brew install redis
> redis-server /usr/local/etc/redis.conf
65024:M 24 Jul 17:08:31.779 * Increased maximum number of open files to 10032 (it was originally set to 256).
65024:M 24 Jul 17:08:31.780 # Server started, Redis version 3.0.2
65024:M 24 Jul 17:08:31.780 * The server is now ready to accept connections on port 6379
2) 我已经安装了 RQ、django-rq 和 queued_search
> pip install rq
> pip install django-rq
> pip install queued_search
3) 在我的 settings.py 文件中,我已将 queued_search 和 django_rq 添加到已安装的应用程序中,并更改了 haystack 信号处理器设置:
INSTALLED_APPS = (
'queued_search',
'django_rq',
'haystack',
....
)
HAYSTACK_SIGNAL_PROCESSOR = 'queued_search.signals.QueuedSignalProcessor'
4) 在我的 settings.py 文件中,我将 QUEUE_BACKEND 设置为 'rq'。 queued_search 应用程序需要定义 QUEUE_BACKEND:
QUEUE_BACKEND = 'rq'
4) 在我的 settings.py 文件中,我添加了 RQ_QUEUES 设置,并为 queued_search:
设置了一个名为 'haystack_search_queue' 的索引
RQ_QUEUES = {
'haystack_search_queue': {
'HOST': 'localhost',
'PORT': 6379,
'DB': 0
}
}
5) 我已将 django_rq 添加到 urls.py:
urlpatterns += patterns('',
(r'^django-rq/', include('django_rq.urls')),
)
但是当我尝试保存一个对象时,我在 rq/connections.py 第 70 行中不断收到此错误:
NoRedisConnectionException at /admin/app/model/pk/
Could not resolve a Redis connection
移动部件太多,我找不到任何关于如何端到端设置它的文档。我错过了一步还是可能有太多步骤?有没有更简单的方法来设置 QueuedSignalProcessor?
我能够使用稍微不同的库配置来设置它:
- Redis :: 这是数据存储
- RQ :: 这是一个实现
使用 Redis 的队列 (https://code.google.com/p/queues/)
- django-rq :: 这是 RQ 的 Django 包装器
- haystack-rqueue :: 这是 Haystack 信号处理库,它将 haystack 信号传递给 django-rq。
切换到 haystack-rqueue 而不是 queued_search 允许所有组件成功地相互通信!
haystack-rqueue 存储库中有一个示例实现:https://github.com/mandx/haystack-rqueue/tree/master/haystack_rq_test
我有一个项目,我想从使用 Haystack 的 queued_search 库迁移过来,使用 Redis 作为队列后端。在此之前,Haystack 和 Django 一切正常,我只是在更换信号处理器时遇到了问题。
我的理解是这实际上需要几层代码:
- Redis :: 这是数据存储
- RQ :: 这是使用 Redis 的队列 (https://code.google.com/p/queues/) 的实现
- django-rq :: 这是 RQ 的 Django 包装器,我可以在其中指定连接设置
- queued_search :: 这是 Haystack 信号处理库。这会寻找一个通用的 QUEUE_BACKEND,它被设置为 'rq'.
1) 我已经在本地安装了Redis。看起来 运行 游刃有余:
> brew install redis
> redis-server /usr/local/etc/redis.conf
65024:M 24 Jul 17:08:31.779 * Increased maximum number of open files to 10032 (it was originally set to 256).
65024:M 24 Jul 17:08:31.780 # Server started, Redis version 3.0.2
65024:M 24 Jul 17:08:31.780 * The server is now ready to accept connections on port 6379
2) 我已经安装了 RQ、django-rq 和 queued_search
> pip install rq
> pip install django-rq
> pip install queued_search
3) 在我的 settings.py 文件中,我已将 queued_search 和 django_rq 添加到已安装的应用程序中,并更改了 haystack 信号处理器设置:
INSTALLED_APPS = (
'queued_search',
'django_rq',
'haystack',
....
)
HAYSTACK_SIGNAL_PROCESSOR = 'queued_search.signals.QueuedSignalProcessor'
4) 在我的 settings.py 文件中,我将 QUEUE_BACKEND 设置为 'rq'。 queued_search 应用程序需要定义 QUEUE_BACKEND:
QUEUE_BACKEND = 'rq'
4) 在我的 settings.py 文件中,我添加了 RQ_QUEUES 设置,并为 queued_search:
设置了一个名为 'haystack_search_queue' 的索引RQ_QUEUES = {
'haystack_search_queue': {
'HOST': 'localhost',
'PORT': 6379,
'DB': 0
}
}
5) 我已将 django_rq 添加到 urls.py:
urlpatterns += patterns('',
(r'^django-rq/', include('django_rq.urls')),
)
但是当我尝试保存一个对象时,我在 rq/connections.py 第 70 行中不断收到此错误:
NoRedisConnectionException at /admin/app/model/pk/
Could not resolve a Redis connection
移动部件太多,我找不到任何关于如何端到端设置它的文档。我错过了一步还是可能有太多步骤?有没有更简单的方法来设置 QueuedSignalProcessor?
我能够使用稍微不同的库配置来设置它:
- Redis :: 这是数据存储
- RQ :: 这是一个实现 使用 Redis 的队列 (https://code.google.com/p/queues/)
- django-rq :: 这是 RQ 的 Django 包装器
- haystack-rqueue :: 这是 Haystack 信号处理库,它将 haystack 信号传递给 django-rq。
切换到 haystack-rqueue 而不是 queued_search 允许所有组件成功地相互通信!
haystack-rqueue 存储库中有一个示例实现:https://github.com/mandx/haystack-rqueue/tree/master/haystack_rq_test