2016-03-07 86 views
0

我試圖運行芹菜命令celeryworker [1]基於此配置[2],但我得到錯誤[3],當我啓動程序。我的程序運行在medusa1-blank1rabbitmq-server運行在hadoop-medusa-1。您可以在[1]中看到$HOST_NAME變量是medusa1-blank1,並且celeryconfig.py包含運行rabbitmq-server的主機地址。AttributeError當我啓動芹菜

我看着我的配置,我找不到任何錯誤。我希望日誌能夠更詳細地瞭解正在發生的事情,但我也不認爲有可能這樣做。由於它看起來錯誤不在我的代碼中,所以我完全無法理解正在發生的事情。任何幫助來嘗試調試這個?

[1]腳本,我使用與芹菜運行

#!/bin/bash 
set -xv 

# This scripts runs celery in the server host 

export C_FORCE_ROOT="true" 
HOST_NAME=`hostname` 

echo "------------------------" 
echo "Initialize celery at $HOST_NAME" 
echo "------------------------" 
celery worker -n $HOST_NAME -E --loglevel=DEBUG --concurrency=20 -f ./logs/celerydebug.log --config=celeryconfig -Q $HOST_NAME 
# celery worker -n medusa1-blank1 -E --loglevel=DEBUG --concurrency=20 -f ./logs/celerydebug.log --config=celeryconfig -Q medusa1-blank1 

[2]的配置,我使用:

(medusa-env)[email protected]:~/Programs/medusa-1.0$ cat celeryconfig.py 
import os 
import sys 

# add hadoop python to the env, just for the running 
sys.path.append(os.path.dirname(os.path.basename(__file__))) 

# broker configuration 
BROKER_URL = "amqp://celeryuser:[email protected]/celeryvhost" 

CELERY_RESULT_BACKEND = "amqp" 
CELERY_RESULT_PERSISTENT = True 
TEST_RUNNER = 'celery.contrib.test_runner.run_tests' 

# for debug 
# CELERY_ALWAYS_EAGER = True 

# module loaded 
CELERY_IMPORTS = ("manager.mergedirs", "manager.system", "manager.utility", "manager.pingdaemon", "manager.hdfs") 

[3]錯誤,我有:

[2016-03-07 10:24:09,482: DEBUG/MainProcess] | Worker: Preparing bootsteps. 
[2016-03-07 10:24:09,484: DEBUG/MainProcess] | Worker: Building graph... 
[2016-03-07 10:24:09,484: DEBUG/MainProcess] | Worker: New boot order: {Timer, Hub, Queues (intra), Pool, Autoscaler, Autoreloader, StateDB, Beat, Consumer} 
[2016-03-07 10:24:09,487: DEBUG/MainProcess] | Consumer: Preparing bootsteps. 
[2016-03-07 10:24:09,487: DEBUG/MainProcess] | Consumer: Building graph... 
[2016-03-07 10:24:09,491: DEBUG/MainProcess] | Consumer: New boot order: {Connection, Agent, Events, Mingle, Tasks, Control, Heart, Gossip, event loop} 
[2016-03-07 10:24:09,491: WARNING/MainProcess] /home/xubuntu/Programs/medusa-1.0/medusa-env/local/lib/python2.7/site-packages/celery/apps/worker.py:161: CDeprecationWarning: 
Starting from version 3.2 Celery will refuse to accept pickle by default. 

The pickle serializer is a security concern as it may give attackers 
the ability to execute any command. It's important to secure 
your broker from unauthorized access when using pickle, so we think 
that enabling pickle should require a deliberate action and not be 
the default choice. 

If you depend on pickle then you should set a setting to disable this 
warning and to be sure that everything will continue working 
when you upgrade to Celery 3.2:: 

    CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml'] 

You must only enable the serializers that you will actually use. 


    warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED)) 
[2016-03-07 10:24:09,493: ERROR/MainProcess] Unrecoverable error: AttributeError("'NoneType' object has no attribute 'rstrip'",) 
Traceback (most recent call last): 
    File "/home/xubuntu/Programs/medusa-1.0/medusa-env/local/lib/python2.7/site-packages/celery/worker/__init__.py", line 206, in start 
    self.blueprint.start(self) 
    File "/home/xubuntu/Programs/medusa-1.0/medusa-env/local/lib/python2.7/site-packages/celery/bootsteps.py", line 119, in start 
    self.on_start() 
    File "/home/xubuntu/Programs/medusa-1.0/medusa-env/local/lib/python2.7/site-packages/celery/apps/worker.py", line 169, in on_start 
    string(self.colored.cyan(' \n', self.startup_info())), 
    File "/home/xubuntu/Programs/medusa-1.0/medusa-env/local/lib/python2.7/site-packages/celery/apps/worker.py", line 230, in startup_info 
    results=self.app.backend.as_uri(), 
    File "/home/xubuntu/Programs/medusa-1.0/medusa-env/local/lib/python2.7/site-packages/celery/backends/base.py", line 117, in as_uri 
    else maybe_sanitize_url(self.url).rstrip("/")) 
AttributeError: 'NoneType' object has no attribute 'rstrip' 
+0

沒有什麼-n $ HOST_NAME的結果呢? –

+0

它是'hostname'('medusa1-blank1')的名稱,但它絕不是'RabbitMQ的-server'正在運行的IP地址('Hadoop的美杜莎 - 1')。 – xeon

+0

嘗試用這個選項:)芹菜節點名運行芹菜將創建如芹菜@主機名(默認) –

回答

0

在我的最低配置文件將是:

CELERY_IMPORTS = ... 
AMPQ_USERNAME = os.getenv('AMQP_USERNAME', '...') 
AMPQ_PASSWORD = os.getenv('AMQP_PASSWORD', '...') 
AMQP_HOST = os.getenv('AMQP_HOST', '172.17.42.1') 
AMQP_PORT = int(os.getenv('AMQP_PORT', '5672')) 
DEFAULT_BROKER_URL = 'amqp://%s:%[email protected]%s:%d'\ 
        % (AMPQ_USERNAME, AMPQ_PASSWORD, AMQP_HOST, AMQP_PORT) 

CELERY_RESULT_BACKEND = 'amqp://%s:%[email protected]%s:%d'\ 
        % (AMPQ_USERNAME, AMPQ_PASSWORD, AMQP_HOST, AMQP_PORT) 

BROKER_API = DEFAULT_BROKER_URL