2017-08-11 93 views
0

我已經搜索過SO和Google,找不到我的問題的答案。精彩應用程序尚未加載錯誤

我開始了我的virtualenv跑在終端命令:

python bin/process_messages.py 

,並出現此錯誤:

堆棧跟蹤:

Traceback (most recent call last): 
File "bin/process_messages.py", line 6, in <module> 
    from xyz.models import get_sku 
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/xyz/models.py", line 19, in <module> 
class Suppliers(models.Model): 
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/django/db/models/base.py", line 110, in __new__ 
app_config = apps.get_containing_app_config(module) 
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/django/apps/registry.py", line 247, in get_containing_app_config 
self.check_apps_ready() 
File "/Users/myname/.environments/xyz_env/lib/python3.6/site-packages/django/apps/registry.py", line 125, in check_apps_ready 
raise AppRegistryNotReady("Apps aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 

我認爲這是沒有運行django.setup,所以我將其添加到腳本中。這裏是我的代碼:

#!/usr/bin/env python 
import os 
import django 
import boto3 
from xyz.settings import SQS_QUEUE_NAME 
from xyz.models import get_sku 

__author__ = 'me' 


def check_django_environment(default_settings): 
    # Environment setup for Django project files: 
    os.sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 
    if not os.environ.get('DJANGO_SETTINGS_MODULE'): 
     # Don't override settings if it is specified. 
     os.environ['DJANGO_SETTINGS_MODULE'] = default_settings 
     from django.conf import settings 

     return getattr(settings, 'DEBUG', None) 

check_django_environment('xyz.settings') 
django.setup() 

# Get the service resource 
sqs = boto3.resource('sqs') 

# Get the queue 
queue = sqs.get_queue_by_name(QueueName=SQS_QUEUE_NAME) 

for message in queue.receive_messages(): 
    print(message) 
    if message.message_attributes is not None: 
     print(message.message_attributes) 

     #sku = message.message_attributes 
     db_sku = get_sku(sku) 
     print(db_sku) 
    break 

我安裝的應用程序:

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'xyz', 
] 

回答

2

通過導入get_sku,要導入你的模型django.setup()已經跑了。您需要將該導入向下移動,以便在django.setup()之後發生。

在使用Django的獨立腳本中,我通常有兩組導入。第一個包含了最低限度,以獲得Django的設置,第二個包含所有其他的進口,包括車型等:

#!/usr/bin/env python 
import os 
import django 

__author__ = 'me' 


def check_django_environment(default_settings): 
    # Environment setup for Django project files: 
    os.sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 
    if not os.environ.get('DJANGO_SETTINGS_MODULE'): 
     # Don't override settings if it is specified. 
     os.environ['DJANGO_SETTINGS_MODULE'] = default_settings 
     from django.conf import settings 

     return getattr(settings, 'DEBUG', None) 

check_django_environment('xyz.settings') 
django.setup() 

import boto3 
from xyz.settings import SQS_QUEUE_NAME 
from xyz.models import get_sku 
+0

你太棒了!我可以給你10,000票:) – Chris

0

除了knbk的答案,你也可以只用manage.py

下面是一個示例腳本,讓我們說script.py

from xyz.models import get_sku 

if __name__ == '__main__': 
    print(get_sku) 

你運行它想:

./manage.py shell < script.py 

也許你正在尋找沒有的東西,但值得了解的,不過。

+0

這是很好的知道 – Chris

相關問題