2017-06-17 71 views
0

此錯誤僅發生在命令scrapyd-deploy上。僅限Scrapyd - 無模塊名稱django_project.settings

Packing version r240-master 
Deploying to project "foo_bot" in http://localhost:6802/addversion.json 
Server response (200): 

{ 
    "status": "error", 
    "message": "Traceback (most recent call last): 
     File \"/usr/lib/python2.7/runpy.py\", line 174, in _run_module_as_main 
     \"__main__\", fname, loader, pkg_name) 
     File \"/usr/lib/python2.7/runpy.py\", line 72, in _run_code 
     exec code in run_globals 
     File \"/usr/local/lib/python2.7/dist-packages/scrapyd/runner.py\", line 40, in <module> 
     main() 
     File \"/usr/local/lib/python2.7/dist-packages/scrapyd/runner.py\", line 37, in main 
     execute() 
     File \"/usr/local/lib/python2.7/dist-packages/scrapy/cmdline.py\", line 109, in execute 
     settings = get_project_settings() 
     File \"/usr/local/lib/python2.7/dist-packages/scrapy/utils/project.py\", line 68, in get_project_settings 
     settings.setmodule(settings_module_path, priority='project') 
     File \"/usr/local/lib/python2.7/dist-packages/scrapy/settings/__init__.py\", line 292, in setmodule 
     module = import_module(module) 
     File \"/usr/lib/python2.7/importlib/__init__.py\", line 37, in import_module 
     __import__(name) 
     File \"build/bdist.linux-x86_64/egg/foo_bot/settings.py\", line 21, in <module> 
     File \"/usr/local/lib/python2.7/dist-packages/django/__init__.py\", line 22, in setup 
     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) 
     File \"/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py\", line 56, in __getattr__ 
     self._setup(name) 
     File \"/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py\", line 41, in _setup 
     self._wrapped = Settings(settings_module) 
     File \"/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py\", line 110, in __init__ 
     mod = importlib.import_module(self.SETTINGS_MODULE) 
     File \"/usr/lib/python2.7/importlib/__init__.py\", line 37, in import_module 
     __import__(name) 
     ImportError: No module named foo_project.settings 
    ", 
    "node_name": "ubuntu" 
} 

這個項目的結構如下:

/home/dev/workspace/fufu 
|--dev_venv/bin/activate 
| 
|--foo_bot 
| |--scrapy.cfg 
| | 
| |--foo_bot 
|  |--settings.py 
|  |--settings_dev.py 
|  |--settings_deploy.py 
|  |--items.py and blablabla 
|  |--spiders 
|  |--blablablaspider.py 
| 
|--foo_project 
    |--manage.py 
    | 
    |--app 
    | |--models.py and blablabla 
    | 
    |--foo_project 
     |--settings.py 
     |--settings_dev.py 
     |--settings_deploy.py 
     |--wsgi.py and blablabla 

scrapy.cfg

[settings] 
default = foo_bot.settings 

[deploy:local] 
url = http://localhost:6801/ 
project = foo_bot 

[deploy:development] 
url = http://localhost:6802/ 
project = foo_bot 
version = GIT 

[deploy:deployment] 
url = http://localhost:6800/ 
project = foo_bot 
version = GIT 

foo_bot/foo_bot/settings.py

import os 
import sys 
import django 

########## PATH CONFIGURATION 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
FALSE_BASE_DIR = os.path.dirname(BASE_DIR) 
#WORKSPACE_DIR = os.path.dirname(FALSE_BASE_DIR) // fail with just scrapy crawl bar 
WORKSPACE_DIR = '/'.join([os.path.expanduser('~'), 'workspace']) 
BOT_NAME = 'foo_bot' 
########## END PATH CONFIGURATION 

########## DJANGO CONFIGURATION 
DJANGO_PROJECT_PATH = '/'.join([FALSE_BASE_DIR, 'foo_project']) 
DJANGO_SETTINGS_MODULE = 'foo_project.settings' 
sys.path.append(DJANGO_PROJECT_PATH) 
sys.path.insert(0, DJANGO_PROJECT_PATH) 
os.environ['DJANGO_SETTINGS_MODULE'] = DJANGO_SETTINGS_MODULE 
django.setup() 
########## END DJANGO CONFIGURATION 

#blablabla settings 

try: 
    from settings_dev import * 
except ImportError: 
    pass 

foo_project/foo_project/settings.py

import os 

########## PATH CONFIGURATION 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
FALSE_BASE_DIR = os.path.dirname(BASE_DIR) 
WORKSPACE_DIR = os.path.dirname(FALSE_BASE_DIR) 
PROJECT_NAME = 'foo_project' 
########## END PATH CONFIGURATION 

foo_project/foo_project/wsgi.py

而且我用virtualenvactivate腳本的末尾如下設置環境變量PYTHONPATHDJANGO_SETTINGS_MODULE

export PYTHONPATH="/home/dev/workspace/fufu/foo_project" 
export DJANGO_SETTINGS_MODULE="foo_project.settings" 

我在fufu/foo_bot運行scrapy crawl bar,它成功運行(並通過djangoitem保存到數據庫)。

我運行django-admin.pyfufu/foo_project,它運行成功,沒有任何警告。

我運行python manage.pyfufu/foo_project,它運行成功,沒有任何警告。我運行scrapyd-deploy development -p foo_bot與用戶dev和virutalenv dev_venv

它返回錯誤,如上所述。

scrapyd被稱爲在/home/dev/workspace/與用戶dev和端口6802

不過,我還有一個用戶deploy一個項目副本在/home/deploy/workspace/fufu/只有在from settings_devfrom settings_deploy和那些絕對路徑不同。

我運行scrapyd-deploy deployment -p foo_bot用戶deploy和virutalenv deploy_venv

它運行完美。

scrapyd被稱爲在/home/deploy/workspace/與用戶deploy和端口6800

我該如何解決這個問題?我已經看到所有的線程,我不知道爲什麼dev用戶失敗,但deploy用戶的工作。

+0

不應該'foo_project.settings'是'foo_project.foo_bot.settings'? –

+0

這是我輸入結構時的錯字 –

回答

0

好的,我明白了。 這是因爲os.path.dirname()會讓我空路徑。

foo_bot/foo_bot/settings.py

########## PATH CONFIGURATION 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
#FALSE_BASE_DIR = os.path.dirname(BASE_DIR) 
#WORKSPACE_DIR = os.path.dirname(FALSE_BASE_DIR) // fail with just scrapy crawl bar 
WORKSPACE_DIR = '/'.join([os.path.expanduser('~'), 'workspace']) 
FALSE_BASE_DIR = '/'.join([WORKSPACE_DIR, 'fufu']) 
BOT_NAME = 'foo_bot' 
########## END PATH CONFIGURATION