मेरे पास एक Django ऐप है जिसे मैं जीसीपी पर तैनात करने की कोशिश कर रहा हूं। जब मैं इसे स्थानीय रूप से चलाता हूं तो ऐप पूरी तरह से ठीक काम करता है, और यह जीसीपी (gcloud ऐप परिनियोजन के माध्यम से) को कोई समस्या नहीं देता है। जब मैं वेबपेज खोलता हूं, तो मुझे "मॉड्यूल नॉटफाउंड एरर: 'गूगल' नाम का कोई मॉड्यूल नहीं" के कारण यह त्रुटि "502 खराब गेटवे 502 nginx" मिलती है। मैं अपने जीसीपी ऐप में Google को ठीक से आयात करने का तरीका नहीं ढूंढ पा रहा हूं। नीचे अधिक विवरण, किसी भी मदद की सराहना की जाती है।

यहां पार्स किया गया स्टैक ट्रेस है (जीसीपी डीबगर के माध्यम से):

ModuleNotFoundError: No module named 'google'
at <module> (/srv/socha_web/settings.py:14)
at _call_with_frames_removed (<frozen importlib._bootstrap>:219)
at exec_module (<frozen importlib._bootstrap_external>:728)
at _load_unlocked (<frozen importlib._bootstrap>:677)
at _find_and_load_unlocked (<frozen importlib._bootstrap>:967)
at _find_and_load (<frozen importlib._bootstrap>:983)
at _gcd_import (<frozen importlib._bootstrap>:1006)
at import_module (/opt/python3.7/lib/python3.7/importlib/__init__.py:127)
at __init__ (/env/lib/python3.7/site-packages/django/conf/__init__.py:142)
at _setup (/env/lib/python3.7/site-packages/django/conf/__init__.py:63)
at __getattr__ (/env/lib/python3.7/site-packages/django/conf/__init__.py:76)
at setup (/env/lib/python3.7/site-packages/django/__init__.py:19)
at _call_with_frames_removed (<frozen importlib._bootstrap>:219)
at exec_module (<frozen importlib._bootstrap_external>:728)
at _load_unlocked (<frozen importlib._bootstrap>:677)
at _find_and_load_unlocked (<frozen importlib._bootstrap>:967)
at _find_and_load (<frozen importlib._bootstrap>:983)
at _gcd_import (<frozen importlib._bootstrap>:1006)
at import_module (/opt/python3.7/lib/python3.7/importlib/__init__.py:127)
at import_app (/env/lib/python3.7/site-packages/gunicorn/util.py:358)
at load_wsgiapp (/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py:39)
at load (/env/lib/python3.7/site-packages/gunicorn/app/wsgiapp.py:49)
at wsgi (/env/lib/python3.7/site-packages/gunicorn/app/base.py:67)
at load_wsgi (/env/lib/python3.7/site-packages/gunicorn/workers/base.py:144)
at init_process (/env/lib/python3.7/site-packages/gunicorn/workers/base.py:119)
at spawn_worker (/env/lib/python3.7/site-packages/gunicorn/arbiter.py:583)

और यहाँ मेरी settings.py फ़ाइल है (मैंने कोई गुप्त कुंजी मिटा दी है):

import os
from google.oauth2 import service_account
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'secret_key'

# SECURITY WARNING: don't run with debug turned on in production!
# IF TESTING LOCALLY, SWITCH THIS TO True
DEBUG = False

ALLOWED_HOSTS = ['*', "https://app-number.wl.r.appspot.com",]
CORS_ORIGIN_ALLOW_ALL = True


# SOCIAL AUTH CONFIG START
SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
    'socha_web.pipeline.profile.create_profile'
)
AUTHENTICATION_BACKENDS = [
    'social_core.backends.facebook.FacebookOAuth2',
    'django.contrib.auth.backends.ModelBackend',
]


LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'search'
LOGOUT_URL = 'logout'
LOGOUT_REDIRECT_URL = 'login'

SOCIAL_AUTH_POSTGRES_JSONFIELD = True


# eventually need to change this to environment variables
SOCIAL_AUTH_FACEBOOK_KEY = 'fb_auth_key'        # App ID
SOCIAL_AUTH_FACEBOOK_SECRET = 'fb_secret' # App Secret
SOCIAL_AUTH_FACEBOOK_SCOPE = ['user_friends', 'email'] # add this
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {       # add this
  'fields': 'id, name, email, picture.type(large), link, friends'
}
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True
SOCIAL_AUTH_FACEBOOK_EXTRA_DATA = [                 # add this
    ('name', 'name'),
    ('email', 'email'),
    ('picture', 'picture'),
    ('link', 'profile_url'),
    ('friends', 'friends')
]
SOCIAL_AUTH_FACEBOOK_API_VERSION = '7.0'


# SOCIAL AUTH CONFIG END



# GAE SETTINGS.py does the following "ALLOWED_HOSTS=['*']
# Application definition

INSTALLED_APPS = [
    'api.apps.ApiConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'social_django',
    'frontend_login',
    'frontend_profile',
    'frontend_writing',
    'frontend_wall',
    'frontend_feed',
    'frontend_footer',
    'master_style_js',
]

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ]
}

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'socha_web.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'social_django.context_processors.backends', # add this
                'social_django.context_processors.login_redirect', # add this
            ],
        },
    },
]

WSGI_APPLICATION = 'app.wsgi.application'

# Database
# https://docs.djangoproject.com/en/3.0/ref/settings/#databases

# [START db_setup]
if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    # root user(postgres)
    # root password
    # can add users in cloud console, just leaving as root for now
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'HOST': '/cloudsql/app-number:us-west1:app-instance',
            'USER': 'user',
            'PASSWORD': 'password',
            'NAME': 'name',
        }
    }
else:    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'HOST': '127.0.0.1',
            'PORT': '5432',
            'NAME': 'app',
            'USER': 'user',
            'PASSWORD': 'password',
        }
    }

# [END db_setup]

# Password validation
# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.0/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

# [START staticurl]
# Fill in your cloud bucket and switch which one of the following 2 lines
# is commented to serve static content from GCS
# STATIC_URL = 'https://storage.googleapis.com/<your-gcs-bucket>/static/'
DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'upload_bucket'
GS_PROJECT_ID = "app-number"
GS_CREDENTIALS = service_account.Credentials.from_service_account_file(
    "socha_web/app-key.json"
)

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = 'static'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

मैं अपने जीसीपी ऐप में Google को ठीक से आयात करने का तरीका नहीं ढूंढ पा रहा हूं, कोई सुझाव?

1
slick_reaper 12 सितंबर 2020, 13:14

1 उत्तर

सबसे बढ़िया उत्तर

पायथन अनुप्रयोगों के लिए निर्भरता एक मानक requirements.txt फ़ाइल में घोषित की जा सकती है।
अपने स्रोत कोड निर्देशिका के मूल में एक requirements.txt बनाएं, ताकि आपके आवेदन के लिए आवश्यक सभी मॉड्यूल निर्भरता की गणना की जा सके (इस उदाहरण में केवल Google मॉड्यूल की आवश्यकता है):

google-api-python-client

जब आप ऐप इंजन में परिनियोजित करते हैं, तो requirements.txt फ़ाइल में निर्दिष्ट निर्भरताएं आपके परिनियोजित ऐप के साथ स्वचालित रूप से इंस्टॉल हो जाएंगी। आप किसी भी लिनक्स-संगत पायथन पैकेज का उपयोग कर सकते हैं, जिसमें मूल सी एक्सटेंशन की आवश्यकता वाले पैकेज शामिल हैं।

1
Neo Anderson 13 सितंबर 2020, 11:26