自定义构建中的 OpenShift/Python27/Django 中的静态文件

自定义构建中的 OpenShift/Python27/Django 中的静态文件

我已经广泛地寻找解决我的问题的方法;然而,由于没有成功,我决定发布一个问题。

简而言之:我创建了一个OpenShift基于此 repo 的 app/build(与 DIY 0.1 墨盒结合):

https://github.com/ehazlett/openshift-diy-py27-django

我遇到的(显然很常见的)问题是我无法访问静态文件;我试过很多

这些是我迄今为止尝试过的一些事情(我假设此构建的 wsgi 是 /app/ (?)):

  • 静态根
    • 我尝试将它设置为我的仓库中几乎所有可能的位置,同时放置一个静止的包含相应静态文件的文件夹,例如
      • /静止的
      • /应用程序/静态
      • /应用程序/应用程序/静态
      • ETC。
  • 静态网址
    • 我将其设置为'/静止的/'如果我没记错的话,这只是 URL 前缀
  • 静态文件目录
    • 将其设置为文件系统上的绝对路径,这样应该不会出现太多错误。
  • .htaccess 也尝试了一些使用 .htaccess 重写的方法,但由于我不太清楚 Django 和 Apache 之间的通信流程如何运作/Django 如何将静态请求传递给 Apache,以及 Apache 的根目录在文件系统/repo 中的什么位置(?),所以尝试了一些不太成功的方法。

如果需要的话我可以提供更多信息,但到目前为止这些是至关重要的。

需要注意的是,这似乎是此版本的独特情况,因为当我基于完全支持的版本创建应用程序时,我没有遇到问题Python26/Django 墨盒

如有任何建议,我们将不胜感激..!

干杯〜

答案1

本文“在 OpenShift 上提供 Django 静态资产”似乎提出了一个解决方案。

答案2

静态文件应由 Apache 直接提供,而不是由 Django 提供。流程如下(假设您的代码库是/srv/code/project):

  • 将您的静态文件放在/srv/code/project/app/static/(在app中列出INSTALLED_APPS
  • 如果您需要与应用程序无关的静态文件(或许多应用程序通用的静态文件),请在STATICFILES_DIRS(通常在您的代码库中,例如/srv/code/project/static/)定义一个目录并将文件放在那里。
  • STATIC_ROOT在代码库之外定义一个,例如/srv/www/example.com/static/。这将充当所有静态文件的缓存。
  • 每当部署项目的新版本时,运行python manage.py collectstatic。这将遍历所有静态目录并将文件复制到STATIC_ROOT
  • 配置 Apache 来为/static/来自下的所有请求提供服务STATIC_ROOT

相关内容