Django 上的芹菜不起作用
Celery on Django not working
使用 Celery 发送电子邮件在生产服务器上运行良好。
尝试在本地开发人员 (VM) 上使用它但不起作用。
重启时我得到这个:
正在启动网络服务器 apache2 [确定]
- 正在启动消息代理 rabbitmq-server [确定]
正在启动 celery 任务工作者服务器 celeryd [确定]
正在启动 celeryev...
: 没有那个文件或目录
运行打开页面时,我也在控制台中收到此错误:
错误:[Errno 104] 连接被对等方重置
生产设置:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "127.0.0.1"
BROKER_PORT = 5672 # default RabbitMQ listening port
BROKER_USER = "vs_user"
BROKER_PASSWORD = "user01"
BROKER_VHOST = "vs_vhost"
CELERY_BACKEND = "amqp" # telling Celery to report the results back to RabbitMQ
CELERY_RESULT_DBURI = ""
当我 运行:
sudo rabbitmqctl list_vhosts
我明白了:
正在列出虚拟主机...
/
...完成。
我需要将此设置更改为 运行 它在本地 VM 上成功吗?
更新
虚拟主机和用户肯定丢失了,所以我 运行 建议了命令。
他们执行得很好,但仍然不起作用,同样的错误。
一定是另外一件事阻止了它的工作,celeryev 值得怀疑。
这是我在停止和启动服务器时得到的:
- 正在停止网络服务器 apache2 ... 正在等待。 [确定]
- 正在停止消息代理 rabbitmq-server [确定]
- 正在停止 celery task worker server celeryd start-stop-daemon:警告:无法杀死 28006:没有这样的进程
[确定]
正在停止 celeryev...不是 运行
- 正在启动网络服务器 apache2 [确定]
- 正在启动消息代理 rabbitmq-server [确定]
- 正在启动 celery task worker 服务器 celeryd [确定]
正在启动 celeryev...
: 没有那个文件或目录
回溯(最近调用最后):
File "/webapps/target/forums/json_views.py", line 497, in _send_forum_notifications
post_master_json.delay('ForumNotificationEmail', email_params)
File "/usr/local/lib/python2.6/dist-packages/celery-3.0.25-py2.6.egg/celery/app/task.py", line 357, in delay
return self.apply_async(args, kwargs)
File "/usr/local/lib/python2.6/dist-packages/celery-3.0.25-py2.6.egg/celery/app/task.py", line 474, in apply_async
**options)
File "/usr/local/lib/python2.6/dist-packages/celery-3.0.25-py2.6.egg/celery/app/amqp.py", line 250, in publish_task
**kwargs
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/messaging.py", line 164, in publish
routing_key, mandatory, immediate, exchange, declare)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 470, in _ensured
interval_max)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 396, in ensure_connection
interval_start, interval_step, interval_max, callback)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/utils/__init__.py", line 217, in retry_over_time
return fun(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 246, in connect
return self.connection
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 761, in connection
self._connection = self._establish_connection()
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 720, in _establish_connection
conn = self.transport.establish_connection()
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/transport/pyamqp.py", line 115, in establish_connection
conn = self.Connection(**opts)
File "/usr/local/lib/python2.6/dist-packages/amqp-1.0.13-py2.6.egg/amqp/connection.py", line 136, in __init__
self.transport = create_transport(host, connect_timeout, ssl)
File "/usr/local/lib/python2.6/dist-packages/amqp-1.0.13-py2.6.egg/amqp/transport.py", line 264, in create_transport
return TCPTransport(host, connect_timeout)
File "/usr/local/lib/python2.6/dist-packages/amqp-1.0.13-py2.6.egg/amqp/transport.py", line 99, in __init__
raise socket.error(last_err)
error: timed out
I 运行 manage.py celeryev 控制台显示 workers 并且 tasks.Everything 为空,仅出现连接错误:错误(超时( 'timed out',),) 重复。
您似乎没有在本地 RabbitMQ 服务器上设置指定的虚拟主机。
您首先需要添加虚拟主机。
sudo rabbitmqctl add_vhost vs_vhost
接下来您需要为您的用户添加权限。
sudo rabbitmqctl set_permissions -p vs_vhost vs_user ".*" ".*" ".*"
此外,请确保您确实设置了一个用户,否则您可以使用此命令添加一个。
sudo rabbitmqctl add_user vs_user user01
使用 Celery 发送电子邮件在生产服务器上运行良好。 尝试在本地开发人员 (VM) 上使用它但不起作用。 重启时我得到这个:
正在启动网络服务器 apache2 [确定]
- 正在启动消息代理 rabbitmq-server [确定]
正在启动 celery 任务工作者服务器 celeryd [确定]
正在启动 celeryev... : 没有那个文件或目录
运行打开页面时,我也在控制台中收到此错误:
错误:[Errno 104] 连接被对等方重置
生产设置:
import djcelery
djcelery.setup_loader()
BROKER_HOST = "127.0.0.1"
BROKER_PORT = 5672 # default RabbitMQ listening port
BROKER_USER = "vs_user"
BROKER_PASSWORD = "user01"
BROKER_VHOST = "vs_vhost"
CELERY_BACKEND = "amqp" # telling Celery to report the results back to RabbitMQ
CELERY_RESULT_DBURI = ""
当我 运行:
sudo rabbitmqctl list_vhosts
我明白了:
正在列出虚拟主机...
/
...完成。
我需要将此设置更改为 运行 它在本地 VM 上成功吗?
更新
虚拟主机和用户肯定丢失了,所以我 运行 建议了命令。 他们执行得很好,但仍然不起作用,同样的错误。 一定是另外一件事阻止了它的工作,celeryev 值得怀疑。 这是我在停止和启动服务器时得到的:
- 正在停止网络服务器 apache2 ... 正在等待。 [确定]
- 正在停止消息代理 rabbitmq-server [确定]
- 正在停止 celery task worker server celeryd start-stop-daemon:警告:无法杀死 28006:没有这样的进程 [确定]
正在停止 celeryev...不是 运行
- 正在启动网络服务器 apache2 [确定]
- 正在启动消息代理 rabbitmq-server [确定]
- 正在启动 celery task worker 服务器 celeryd [确定]
正在启动 celeryev... : 没有那个文件或目录
回溯(最近调用最后):
File "/webapps/target/forums/json_views.py", line 497, in _send_forum_notifications
post_master_json.delay('ForumNotificationEmail', email_params)
File "/usr/local/lib/python2.6/dist-packages/celery-3.0.25-py2.6.egg/celery/app/task.py", line 357, in delay
return self.apply_async(args, kwargs)
File "/usr/local/lib/python2.6/dist-packages/celery-3.0.25-py2.6.egg/celery/app/task.py", line 474, in apply_async
**options)
File "/usr/local/lib/python2.6/dist-packages/celery-3.0.25-py2.6.egg/celery/app/amqp.py", line 250, in publish_task
**kwargs
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/messaging.py", line 164, in publish
routing_key, mandatory, immediate, exchange, declare)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 470, in _ensured
interval_max)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 396, in ensure_connection
interval_start, interval_step, interval_max, callback)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/utils/__init__.py", line 217, in retry_over_time
return fun(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 246, in connect
return self.connection
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 761, in connection
self._connection = self._establish_connection()
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/connection.py", line 720, in _establish_connection
conn = self.transport.establish_connection()
File "/usr/local/lib/python2.6/dist-packages/kombu-2.5.16-py2.6.egg/kombu/transport/pyamqp.py", line 115, in establish_connection
conn = self.Connection(**opts)
File "/usr/local/lib/python2.6/dist-packages/amqp-1.0.13-py2.6.egg/amqp/connection.py", line 136, in __init__
self.transport = create_transport(host, connect_timeout, ssl)
File "/usr/local/lib/python2.6/dist-packages/amqp-1.0.13-py2.6.egg/amqp/transport.py", line 264, in create_transport
return TCPTransport(host, connect_timeout)
File "/usr/local/lib/python2.6/dist-packages/amqp-1.0.13-py2.6.egg/amqp/transport.py", line 99, in __init__
raise socket.error(last_err)
error: timed out
I 运行 manage.py celeryev 控制台显示 workers 并且 tasks.Everything 为空,仅出现连接错误:错误(超时( 'timed out',),) 重复。
您似乎没有在本地 RabbitMQ 服务器上设置指定的虚拟主机。
您首先需要添加虚拟主机。
sudo rabbitmqctl add_vhost vs_vhost
接下来您需要为您的用户添加权限。
sudo rabbitmqctl set_permissions -p vs_vhost vs_user ".*" ".*" ".*"
此外,请确保您确实设置了一个用户,否则您可以使用此命令添加一个。
sudo rabbitmqctl add_user vs_user user01