【问题标题】:Cannot upload media files on CPanel (using django)无法在 CPanel 上上传媒体文件(使用 django)
【发布时间】:2020-11-29 09:29:10
【问题描述】:

我无法在 Cpanel 上上传我的媒体文件。最初我能够上传文件,但现在它显示错误 404 URL Not Found。

我的代码或网址没有任何问题,因为它在 localhost 上运行良好。

我已经在我的 CPanel 文件管理器(它的 0755)中检查了目录的权限。

我在我的 urls.py 文件中指定了 + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的 settings.py 是:

MEDIA_ROOT = '/my/path/public_html/media'
MEDIA_URL = '/media/'

我正在使用 Django=2.1 和 CPanel 共享主机

我知道建议在生产环境中使用 Web 服务器来存储和提供媒体文件,但如果我能找到解决此错误的方法会很有帮助。

【问题讨论】:

    标签: python django cpanel namecheap


    【解决方案1】:

    将此代码添加到 passenger_wsgi.py 文件并在第 4 行更改 project_name:

    import os
    import sys
    sys.path.append(os.getcwd())
    os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'
    import django.core.handlers.wsgi
    from django.core.wsgi import get_wsgi_application
    SCRIPT_NAME = os.getcwd()
    class PassengerPathInfoFix(object):
        def __init__(self, app):
            self.app = app
        def __call__(self, environ, start_response):
            from urllib.parse import unquote
            environ['SCRIPT_NAME'] = SCRIPT_NAME
            request_uri = unquote(environ['REQUEST_URI'])
            script_name = unquote(environ.get('SCRIPT_NAME', ''))
            offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
            environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
            return self.app(environ, start_response)
    application = get_wsgi_application()
    application = PassengerPathInfoFix(application)
    

    更多信息:转至here

    【讨论】:

    • 谢谢你,这成功了,你能告诉我真正的问题是什么吗?
    • 我也想知道。今年以来我一直有这个错误
    • passenger_wsgy.py 文件中的@Ombori SCRIPT_NAME 设置为相对路径,而不是应用程序的根目录
    • 你刚刚救了我的命..非常感谢
    【解决方案2】:

    尝试在路径末尾添加斜杠

    MEDIA_ROOT = '/my/path/public_html/media/'

    【讨论】:

      【解决方案3】:

      编辑您的 settings.py 并在末尾添加以下行:

      STATIC_URL = '/static/'
      STATIC_ROOT = '/home/username/public_html/static'
      

      用您的 cPanel 用户名替换用户名。 STATIC_ROOT 基本上指向域根目录中名为 static 的文件夹。只有在您的主域上工作时,您才会使用 public_html。
      现在,如果您正在处理 子域,您将使用文件夹名称而不是 public_html,如图所示。

      STATIC_URL = '/static/'
      STATIC_ROOT = '/home/username/test.mydomain.com/static'
      

      现在在cpanel中打开终端,激活虚拟环境并执行以下命令:

      python manage.py collectstatic
      

      应将静态文件复制到目标文件夹。 添加:

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

      在 cPanel 中设置 python 应用程序并重新启动 python 应用程序。 你可以在这里看到更多link

      【讨论】:

        猜你喜欢
        • 2020-12-31
        • 2016-04-14
        • 2019-07-01
        • 2019-01-29
        • 1970-01-01
        • 2022-06-13
        • 2014-10-20
        • 2016-02-21
        • 2015-10-06
        相关资源
        最近更新 更多