为什么Django encouter ModuleNotFoundError在生产服务器(WebFaction)中可以在开发服务器上很好地运行,为什么?

问题描述 投票:1回答:0

我是Django的新手,这是我第一次尝试在WebFaction上部署Django应用程序。 我在StackOverflow上进行了搜索,但没有找到遇到相同问题的人。

我的应用是使用Django 2.2和Python 3.7.3开发的。 我已成功运行makemigrationsmigratecollectstatic我的电脑上的本地主机和Windows上获得到SSH服务器WebFaction使用腻子时成功运行这些命令。

但是,当我重新启动WebFaction服务器并使用浏览器访问时,它返回了ModuleNotFoundError

ModuleNotFoundError at /

No module named 'app_www_admission.urls'

Request Method:     GET
Request URL:    (my website's URL)
Django Version:     2.1.7
Exception Type:     ModuleNotFoundError
Exception Value:    

No module named 'app_www_admission.urls'

Exception Location:     <frozen importlib._bootstrap> in _find_and_load_unlocked, line 965
Python Executable:  /usr/local/bin/python3
Python Version:     3.7.3
Python Path:    

['/home/marknguyen94/webapps/adm_220_2',
 '/home/marknguyen94/webapps/adm_220_2/app_www_admission',
 '/home/marknguyen94/webapps/adm_220_2/lib/python3.7',
 '/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg',
 '/home/marknguyen94/webapps/adm_220_2/lib/python3.7/pytz-2019.1-py3.7.egg',
 '/home/marknguyen94/lib/python3.7',
 '/usr/local/lib/python37.zip',
 '/usr/local/lib/python3.7',
 '/usr/local/lib/python3.7/lib-dynload',
 '/home/marknguyen94/.local/lib/python3.7/site-packages',
 '/usr/local/lib/python3.7/site-packages']

Server time:    Wed, 24 Apr 2019 10:48:37 +0000

我尝试解析我在以下文件中导入的软件包: admin.pyforms.pymodels.pysettings.py ,main urls.py ,应用程序的urls.pyviews.py ,我意识到:

  1. 为了进行开发,我必须使用以下命令导入:
    from app_www_admission.models import ...

  2. 为了生产,当我重新启动Webfaction服务器时,必须使用以下命令导入:
    from app_www_admission.app_www_admission.models import ...

选项(1)让我运行makemigrationsmigratecollectstaticcheck的命令等,但通过浏览器访问该网站时,正如我上面提到导致ModuleNotFoundError。 服务器的错误日志如下。
选项(2)让我通过浏览器访问的网站如我所料(在浏览器中没有更多的ModuleNotFoundError),但我不能命令做任何事情makemigrationsmigratecollectstaticcheck等,因为它总是抛出
ModuleNotFoundError: No module named 'app_www_admission.app_www_admission'

有关更多信息,我通过将所有文件从本地计算机复制到WebFaction,已安装的pip和必要的程序包进行部署,但问题似乎出在app_www_admission上 。 现在我可以做的是:切换到(1),运行所有必需的命令(以进行迁移或执行某些操作),然后通过编辑服务器上的所有相关文件切换到(2),然后重新启动服务器。 在这些选项之间进行切换非常麻烦,我知道在某个地方我一定很傻并且错了。

您能告诉我我提到的导入路径有什么问题吗?设置或某些方面有什么问题吗? 非常感谢您的帮助。

我在WebFaction上的项目结构:

/
├── home
│   ├── marknguyen94
│   |   ├── .cache
│   |   ├── .local
│   |   ├── .pki
│   |   ├── .subversion
│   |   ├── bin
│   |   ├── certificates
│   |   ├── lib
│   |   ├── logs
│   |   ├── webapps
│   |   |   ├── adm_static
│   |   |   ├── adm_220_2
│   |   |   |   ├── apache2
│   |   |   |   ├── bin
│   |   |   |   ├── lib
│   |   |   |   ├── app_www_admission
│   |   |   |   |   ├── __init__.py
│   |   |   |   |   ├── manage.py
│   |   |   |   |   ├── conf
│   |   |   |   |   ├── locale
│   |   |   |   |   ├── app_www_admission
│   |   |   |   |   |   ├── __init__.py
│   |   |   |   |   |   ├── admin.py
│   |   |   |   |   |   ├── forms.py
│   |   |   |   |   |   ├── models.py
│   |   |   |   |   |   ├── settings.py
│   |   |   |   |   |   ├── tokens.py
│   |   |   |   |   |   ├── urls.py
│   |   |   |   |   |   ├── wsgi.py
│   |   |   |   |   |   ├── db.sqlite3
│   |   |   |   |   |   ├── migrations
│   |   |   |   |   |   ├── static
│   |   |   |   |   |   ├── templates
│   |   |   |   |   |   ├── tekkyhouse
│   |   |   |   |   |   |   ├── __init__.py
│   |   |   |   |   |   |   ├── admission
│   |   |   |   |   |   |   |   ├── __init__.py
│   |   |   |   |   |   |   |   ├── django
│   |   |   |   |   |   |   |   |   ├── __init__.py
│   |   |   |   |   |   |   |   |   ├── home
│   |   |   |   |   |   |   |   |   |   ├── __init__.py
│   |   |   |   |   |   |   |   |   |   ├── urls.py
│   |   |   |   |   |   |   |   |   |   ├── views.py

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app_www_admission.app_www_admission.settings')

application = get_wsgi_application()

settings.py中的某些部分

BASE_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "app_www_admission")
print ("BASE_DIR: ", BASE_DIR)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',
    'app_www_admission',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.facebook',
    'allauth.socialaccount.providers.google',
    'allauth.socialaccount.providers.linkedin',
    'allauth.socialaccount.providers.linkedin_oauth2',
]

# this works for development server
ROOT_URLCONF = 'app_www_admission.urls'

# this works for production
# ROOT_URLCONF = 'app_www_admission.app_www_admission.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR + "/templates", ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
            ],
        },
    },
]

WSGI_APPLICATION = 'app_www_admission.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

LOCALE_PATHS = [
  os.path.join(BASE_DIR, 'locale'),
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = [
    ('en', _('English')),
    ('fr', _('French')),
    ('vi', _('Vietnamese')),
]

STATIC_ROOT = '/home/marknguyen94/webapps/adm_static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
print("STATICFILES_DIRS: ", STATICFILES_DIRS)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)
print("TEMPLATES_DIRS: ", TEMPLATE_DIRS)


TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    # 'django.template.loaders.eggs.Loader',
)

admin.pyforms.py的“导入部分”

# this works for development server
from app_www_admission.models import UserProfile

# this works for production
# from app_www_admission.app_www_admission.models import UserProfile

views.py的“导入部分”

from django.shortcuts import render
from django.views import View
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from django.db.models import Max
from django.contrib.sites.shortcuts import get_current_site
from django.utils.encoding import force_bytes, force_text
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.core.mail import EmailMessage
import json

# these work for development server
from app_www_admission.models import UserProfile, GameSession
from app_www_admission.forms import UserModelForm
from app_www_admission.tokens import account_activation_token

# these work for production
# from app_www_admission.app_www_admission.models import UserProfile, GameSession
# from app_www_admission.app_www_admission.forms import UserModelForm
# from app_www_admission.app_www_admission.tokens import account_activation_token

主要的urls.py

from django.urls import include
from django.urls import path
from django.views.i18n import JavaScriptCatalog
from django.contrib import admin
# from django.contrib.staticfiles.urls import staticfiles_urlpatterns

js_info_dict = {
    'domain': 'djangojs',
    'packages': ('app_www_admission',),
}

urlpatterns = [
    path('admin/', admin.site.urls),

    # this works for development server
    path('', include('app_www_admission.tekkyhouse.admission.django.home.urls')),

    # this works for production
    # path('', include('app_www_admission.app_www_admission.tekkyhouse.admission.django.home.urls')),

    # # Localization
    path('i18n/', include('django.conf.urls.i18n')),
    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
]

# urlpatterns += staticfiles_urlpatterns()

该应用程序的urls.py

from django.urls import path, include
from django.conf.urls import url

# this works for development server
from app_www_admission.tekkyhouse.admission.django.home import views

# this works for production
# from app_www_admission.app_www_admission.tekkyhouse.admission.django.home import views


urlpatterns = [
    path('', views.HomeView.as_view(), name='home'),
    path('activate/<str:uid>/<str:token>', views.Activate.as_view(), name='activate'),
    path('register', views.RegisterView.as_view(), name='register'),
    path('game', views.GameView.as_view(), name='game'),
    path('gameover', views.GameOverView.as_view(), name='gameover'),
    path('gamefinished', views.GameFinishedView.as_view(), name='gamefinished'),
    url(r'^accounts/', include('allauth.urls')),
]

WebFaction服务器的选项(1)错误日志

[Wed Apr 24 10:55:50.407745 2019] [mpm_worker:notice] [pid 15709:tid 140385667327872] AH00292: Apache/2.4.37 (Unix) mod_wsgi/4.6.5 Python/3.7 configured -- resuming normal operations
[Wed Apr 24 10:55:50.407853 2019] [core:notice] [pid 15709:tid 140385667327872] AH00094: Command line: '/home/marknguyen94/webapps/adm_220_2/apache2/bin/httpd.worker -f /home/marknguyen94/webapps/adm_220_2/apache2/conf/httpd.conf'
[Wed Apr 24 10:56:00.948624 2019] [wsgi:error] [pid 31535:tid 140385586988800] BASE_DIR:  /home/marknguyen94/webapps/adm_220_2/app_www_admission/app_www_admission
[Wed Apr 24 10:56:00.948979 2019] [wsgi:error] [pid 31535:tid 140385586988800] STATICFILES_DIRS:  ('/home/marknguyen94/webapps/adm_220_2/app_www_admission/app_www_admission/static',)
[Wed Apr 24 10:56:00.949025 2019] [wsgi:error] [pid 31535:tid 140385586988800] TEMPLATES_DIRS:  ('/home/marknguyen94/webapps/adm_220_2/app_www_admission/app_www_admission/templates',)
[Wed Apr 24 10:56:01.273233 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672] Internal Server Error: /
[Wed Apr 24 10:56:01.273311 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672] Traceback (most recent call last):
[Wed Apr 24 10:56:01.273337 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/core/handlers/exception.py", line 34, in inner
[Wed Apr 24 10:56:01.273361 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     response = get_response(request)
[Wed Apr 24 10:56:01.273384 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/core/handlers/base.py", line 111, in _get_response
[Wed Apr 24 10:56:01.273408 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     resolver_match = resolver.resolve(request.path_info)
[Wed Apr 24 10:56:01.273429 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/urls/resolvers.py", line 491, in resolve
[Wed Apr 24 10:56:01.273452 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     for pattern in self.url_patterns:
[Wed Apr 24 10:56:01.273473 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/utils/functional.py", line 37, in __get__
[Wed Apr 24 10:56:01.273496 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     res = instance.__dict__[self.name] = self.func(instance)
[Wed Apr 24 10:56:01.273518 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/urls/resolvers.py", line 533, in url_patterns
[Wed Apr 24 10:56:01.273541 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
[Wed Apr 24 10:56:01.273564 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/utils/functional.py", line 37, in __get__
[Wed Apr 24 10:56:01.273648 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     res = instance.__dict__[self.name] = self.func(instance)
[Wed Apr 24 10:56:01.273676 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/home/marknguyen94/webapps/adm_220_2/lib/python3.7/Django-2.1.7-py3.7.egg/django/urls/resolvers.py", line 526, in urlconf_module
[Wed Apr 24 10:56:01.273700 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     return import_module(self.urlconf_name)
[Wed Apr 24 10:56:01.273721 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
[Wed Apr 24 10:56:01.273766 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]     return _bootstrap._gcd_import(name[level:], package, level)
[Wed Apr 24 10:56:01.273791 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
[Wed Apr 24 10:56:01.273814 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "<frozen importlib._bootstrap>", line 983, in _find_and_load
[Wed Apr 24 10:56:01.273837 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672]   File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
[Wed Apr 24 10:56:01.273860 2019] [wsgi:error] [pid 31535:tid 140385586988800] [remote 127.0.0.1:57672] ModuleNotFoundError: No module named 'app_www_admission.urls'
python django module production webfaction
© www.soinside.com 2019 - 2024. All rights reserved.