django,在共享托管上找不到设置模块

问题描述 投票:0回答:1
部署过程涉及在CPanel的“设置Python App”中创建Python“应用程序”;选择Python版本(我选择3.11),选择一个名称(“ MyApp”),选择域名并保存应用程序。 这将使用我的用户名('username'),应用程序名称和Python版本创建虚拟环境(或VENV)。 对我来说:

/home/username/virtualenv/appname/3.11/

然后,CPANEL显示代码以选择和激活此VENV,以用于CPANEL的终端部分。 我切换到终端,激活了VENV,PIP安装了Django,并使用了Django-Admin Startproject…创建站点(“ mysite”)。 然后,我在项目中找到了wsgi.py文件,并将该位置保存在CPANEL设置PythonApp

(/mysite/site/wsgi.py)

CPANEL确认它可以找到设置文件。没有任何进一步的更改,这将产生调试主页(火箭开启)。但是,我获得了一个500服务器错误页面和一个错误日志。

STDERR.LOG错误日志显示服务器经过同一周期两次,其中之一是在下面进行设置。在大多数周期中,它使用正确的VENV中的代码,但有几个例外。一旦尝试使用imp.py加载pastenger_wsgi.py(这不应该是因为我告诉过它wsgi.py文件在哪里),并且一次使用EmpertLib.py在未能找到设置文件的地方。两次都使用

/opt/alt/python311/lib64/python3.11

我的VENV和失败。
当我提出一张支持票时,建议我咨询我的开发人员(er,就是我)。
我的问题是
提前感谢您的任何帮助。

stderr.log的内容如下:

stderr.log (ASCII text)


Traceback (most recent call last):
  File "/home/username/appname/passenger_wsgi.py", line 8, in <module>
    wsgi = imp.load_source('wsgi', 'mysite/mysite/wsgi.py')
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/imp.py", line 172, in load_source
    module = _load(spec)
             ^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 721, in _load
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "mysite/mysite/wsgi.py", line 16, in <module>
    application = get_wsgi_application()
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/virtualenv/appname/3.11/lib/python3.11/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
      django.setup(set_prefix=False)
  File "/home/username/virtualenv/appname/3.11/lib/python3.11/site-packages/django/__init__.py", line 19, in setup
     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
                      ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/virtualenv/appname/3.11/lib/python3.11/site-packages/django/conf/__init__.py", line 89, in __getattr__
  self._setup(name)
  File "/home/username/virtualenv/appname/3.11/lib/python3.11/site-packages/django/conf/__init__.py", line 76, in _setup
    self._wrapped = Settings(settings_module)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/username/virtualenv/appname/3.11/lib/python3.11/site-packages/django/conf/__init__.py", line 190, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/alt/python311/lib64/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'mysite.settings'
[UID:1295][2353167] Child process with pid: 2353179 was killed by signal: 15, core dumped: no

Q1问题似乎来自服务器的乘客和Django文件系统之间的接口

Q2是。我更改了他们的乘客。文件,我的网站现在正在工作。大多数步骤都在下面列出。
Q3我确实回去支持,但没有收到任何有用的答案。
注册CPANEL,域,域对话中的域。

CPANEL的域添加了域对话

to to Cpanel,软件,设置Python应用程序,然后单击创建应用程序

CPANEL的设置Python应用程序对话

python-3.x django settings missing-data hosted
1个回答
0
投票
(我选择了Python 3.10,因此适用于Django 5.0.3-最新的写作时)

在Python版本,应用程序名称和域中输入到设置PythonApp

该服务器将使用乘客。Py文件为您的应用程序('myapp')创建一个文件夹,并在其Virtualenv文件夹中启动您的应用程序和相同名称的虚拟环境。 它提供了激活VENV的代码,并在创建应用程序后生成的对话中移动到应用程序文件夹。可以简单地单击它来复制。 Pypython应用程序创建对话

在此示例中,代码将为 source /home/username/virtualenv/myapp/3.10/bin/activate && cd /home/username/myapp

在CPANEL,高级,终端此代码将激活VENV,并将您带到应用程序的顶部。 注意:在基于Web的终端上使用Ctrl + Shift + V到粘贴

(您可以将文件上传到应用程序)

python -m pip install Django

完成后将显示Django版本

简化的文件结构看起来像这样:

myapp/

passenger.py

myproject/

  manage.py

myproject/


settings.py

    urls.py
  • 
    
      wsgi.py
    • 
      
    • 修改urls.py以使该站点有所显示
    • # myproject/urls.py from django.contrib import admin from django.urls import path from django.views import debug urlpatterns = [ path('', debug.default_urlconf), path('admin/', admin.site.urls), ]
    • 在设置文件中,将域名添加到允许的主机列表中。
      
      ALLOWED_HOSTS = ['mysite.com']
    • 最终 django创建了一个wsgi.py文件,我用它来修改他们的乘客。
      # passenger.py
      import os
      import sys
      from django.core.wsgi import get_wsgi_application
      # Change myproject to the name of your project
      
      # sys.path holds a list of directories that the python interpreter
      # will search for a required module
      # The following works out the directories to search 
      # in your python app and Django project
      
      # Get the directory path of this passenger file - myapp
      this_path = os.path.dirname(os.path.abspath(__file__))
      # Only add this if it's not in the list
      if this_path not in sys.path:  
          sys.path.insert(0, this_path)
      
      # Work out the directory of the Settings file
      settings_path = os.path.join(this_path, 'myproject', 'myproject')
      if settings_path not in sys.path:  # Only add this if ...
          sys.path.insert(1, settings_path)
      
      # Work out the directory path of the top of the project
      project_path = os.path.join(this_path, 'myproject')
      if project_path not in sys.path:  # Only add this if ...
          sys.path.insert(2, project_path)
      
      # The last lines are taken from the wsgi.py file created by Django
      # Set the settings module environment variable
      os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings')
      
      # Passenger looks for a function called application
      application = get_wsgi_application()  
      
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.