2017-08-11 9 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を使用するスタンドアロンスクリプトでは、一般に2つのインポートグループがあります。最初は、Djangoの設定を取得するために最低限が含まれている、第二は、の答えをknbkに加えて、モデル等:

#!/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

を含む他のすべての輸入を、含まれている、あなたはまた、単にmanage.pyを使用することができます。

ここでのスクリプト例だ、のはscript.pyを言わせて:

from xyz.models import get_sku 

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

そして、あなたが好きなことを実行します。それにもかかわらず、

./manage.py shell < script.py 

はたぶんあなたが探しているではないものを、しかし、知っておく価値。

+0

それは知っておきたいです – Chris

関連する問題