【问题标题】:Django on Heroku - Broken Admin Static FilesHeroku 上的 Django - 损坏的管理静态文件
【发布时间】:2012-05-05 17:50:31
【问题描述】:

我有一个在 Heroku/Cedar 上运行的 Django 应用程序,按照 https://devcenter.heroku.com/articles/django 的说明进行配置

按照 Heroku 的说明使用 gunicorn 无法包含 Django 管理员运行所需的静态文件。我可以将 Procfile 更改为“manage.py run_gunicorn”以进行本地开发,但这不适用于 Heroku。

我已经到处寻找修复方法 - 是否有某种方法可以包含管理静态文件,而不会将它们与我的其他静态文件一起扔到 S3 上?

【问题讨论】:

    标签: django heroku django-admin


    【解决方案1】:

    如果您使用 runserver 并使用 DEBUG=True 配置您的应用程序,那么它将像在您的开发机器上一样提供管理文件。但是,这绝对不是推荐的方法,我建议您将它们放在 S3 上。

    使用 django-storages 应用程序很容易配置 collectstatic 以自动将所有管理文件推送到 S3。你可以找到路线here

    【讨论】:

      【解决方案2】:

      查看这篇文章:http://matthewphiong.com/managing-django-static-files-on-heroku

      如果这对您不起作用,请尝试在正常的 url 模式元组之后将以下内容添加到您的 urls.py 中。确保你已经设置了 STATIC_ROOT 并且在推送到 heroku 之前你已经在本地环境中运行了 collect static 。

      urlpatterns += patterns('',
          url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
              'document_root': settings.STATIC_ROOT,
          }),
       )
      

      【讨论】:

      • 对我来说,使用 Django 1.5.1,'django.contrib.staticfiles.views' 有效,而 'django.views.static.serve' 没有。
      • 感谢您的注意 - 我认为路径在 1.5 中发生了变化
      【解决方案3】:

      我让 django 管理员处理以下编辑

      urls.py(最后)

      import settings
      urlpatterns += patterns('',
          url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
              'document_root': settings.STATIC_ROOT,
          }),
      )
      

      过程文件

      web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT
      

      【讨论】:

        【解决方案4】:

        只需添加这些

        from django.contrib.staticfiles.urls import staticfiles_urlpatterns
        urlpatterns += staticfiles_urlpatterns()
        

        使用 django 1.4.1

        【讨论】:

        • 也适用于版本:3.1.5。 :) 具体将其添加到包含“path('admin/', admin.site.urls)”的相同 urlpatterns 列表中。
        • 发挥魅力
        【解决方案5】:

        'django.contrib.staticfiles.views.serve'

        而不是

        'django.views.static.serve'

        【讨论】:

          【解决方案6】:

          在“project_directory”中创建“static”文件夹。

          在“settings.py”文件中设置“STATIC_ROOT”路径,该路径可以为您的管理站点的静态文件提供服务。

          STATIC_ROOT = (os.path.join(os.path.dirname(__file__), '..', 'static'))
          

          在“/urls.py”中添加 STATIC_ROOT

          from django.conf import settings
              urlpatterns += patterns('',
                  url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
                      'document_root': settings.STATIC_ROOT,
                  }),
              )
          

          运行以下命令,将所有管理静态文件复制到项目的静态文件夹中。

          python manage.py collectstatic
          

          现在执行 git add、commit 和 push heroku master。

          【讨论】:

            【解决方案7】:

            与要求的日期相比,似乎有点晚了。但我进入了这个问题,花了 30 分钟来解决我做错了什么。所以对于那些可能陷入这个陷阱的人来说,这是一个神奇的解决方案。

            Heroku的django.contrib.staticfiles.urls有问题

            解决方案

            您需要在 Heroku 设置中安装 dj-static (Link to download)。 这是一个 Django 中间件实用程序,允许使用 Gunicorn 等 WSGI 服务器从生产中正确提供静态资产。

            我希望这会对某人有所帮助。

            【讨论】:

            • 将它添加到设置中实际上是 Heroku 教程的一部分。我完成了这些说明,但在管理员中仍然遇到同样的问题,所以这似乎不是一个有效的解决方案。
            • 当时它对我有用。我不知道为什么它现在不起作用。
            • 成功了!好兄弟!
            【解决方案8】:

            按照这个来修复所有与 Django 和 heroku 相关的静态问题。

            在您的settings.py 中将其粘贴到末尾

            import os
            BASE_DIR = os.path.dirname(os.path.abspath(__file__))
            
            STATICFILES_DIRS = (
                os.path.join(BASE_DIR,'static'),
                )
            TEMPLATE_DIRS = (
                os.path.join(BASE_DIR,'templates'),
                )
            
            STATIC_URL = '/static/'
            

            您的特定应用模板应位于app_name/templates/app_name/

            当您渲染模板时,您将指定template name

            views.py

            .....
            return render(request,'app_name/template_name.html',context)
            

            对于static files,请将您的文件放在这里:

            project_folder/app_name/static/app_name/css

            project_folder/app_name/static/app_name/js

            project_folder/app_name/static/app_name/img

            访问您的静态文件使用路径app_name/css/style_name.css

            如果您遵循此操作,您的所有静态文件都将在 heroku 以及您的本地开发机器中正常加载。

            【讨论】:

              【解决方案9】:

              如果您在不使用白噪声(我建议)的情况下部署到 Heroku,请务必使用 dj_static https://pypi.python.org/pypi/dj-static

              过去 3 小时我尝试将我的文件提供给 heroku,而 dj_static 在 2 分钟内就工作了。

              【讨论】:

                猜你喜欢
                • 2014-05-30
                • 1970-01-01
                • 2014-02-04
                • 2014-10-31
                • 2021-06-03
                • 1970-01-01
                • 2016-11-13
                • 2014-06-08
                • 2021-10-28
                相关资源
                最近更新 更多